ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] > Tip 数组可以 是二维的或三维的n维的 ## 1. 数组遍历(暂定四种) ### 1.1 for 循环 ``` var arr = [1,2,3]; for(let i = 0; i<arr.length ; i++){ console.log(arr[i]) } ``` ### 1.2 for in ``` var arr = [1,2,3]; for(let k in arr){ console.log(arr[k]); } ``` ### 1.3 for of ``` var arr = [1,2,3]; for(let n of arr){ // console.log(arr[n]); 此时n已经有值了,当获取下标0时,n为1,arr[1]就为2; console.log(n); } ``` ### 1.4 forEach ``` arr.forEach((v,k)=>{ console.log(v); //值 console.log(k); //下标 }) ``` ### 1.5 arr.map/Array.from ``` var arr = [1,2,3]; // Array.from(arr,(value,index)=>{ // console.log(index); // }) /* arr.map((value,index)=>{ console.log(index); }) */ arr.map(function(value,index){ console.log(index) }) ``` ## 2.增加数组 ### 2.1 `push/unshift`增加数组内容 * push/unshift 改变数组内容,不可接数组 * 1. push 从后增加 push(para1,para2) * 2. unshift 从头增加 unshift(para1,para2) 可以用展开语法传数组 ``` var arr = [1,2,3,4]; arr.unshift(-1,0) arr.push(5,6); console.log(arr); //-1,0,1,2,3,4,5,6 arr.unshift(...["h","p"]); console.log(arr) //"h","p",-1,0,1,2,3,4,5,6 ``` ### 2.2 `concat` * 可以接数组,不会改变数组内容 * concat(para1,para2) * concat([para1,para2]) //传数组和值效果一样,都是增加数组内容 ``` var arr = [1,2,3,4]; var n = arr.concat(7,8) var m = arr.concat([1,2]) console.log(m) //1,2,3,4,1,2 console.log(n) //1,2,3,4,7,8 console.log(arr); //1,2,3,4 ``` ### 2.3 复制数组 #### 2.3.1 方法1 push ``` var arr = [1,2,3,4]; var b = []; for(let i = 0;i<arr.length;i++){ b.push(arr[i]); } var b = [].concat(arr); ``` #### 2.3.2 方法二 slice ``` console.log(b); var b = arr.slice(0); console.log(b); ``` ## 3 删除数组 ### 3.1 shift/pop 删除单个 > shift() -->方法用于把数组的第一个元素从其中删除,并返回第一个元素的值 > pop() --> 方法用于删除数组的最后一个元素。 ``` var arr = [1,2,3,4]; arr.shift(); arr.pop(); console.log(arr); ``` ### 3.2 splice 删除多个定点删除 * splice(index,howmany) * index -->从哪里开始 删除下标 1 splice(1,1) howmany --> 删除几个 ``` var arr = [ 1,2,3,4,5]; arr.splice(0,2) console.log(arr); // 3,4,5 ``` ## 4 改 ### 4.1 splice * splice(index,howmany,item1,item2....) index -->从哪里开始 //在下标为 1 的值 后面加入2.3 //splice(1,0,23) howmany --> 删除几个 item -->在删除的地方添加的值 ``` var arr = [ 1,2,3,4,5]; arr.splice(0,2,8,9) console.log(arr); //8,9,3,4,5 ``` ### 4.2 arr[1] = 20 直接将下标为1的改为20 ### 4.3 将一维数组改成二维数组 > arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] #### 第一种 找到二维数组的一维下标 newArr[ [0],[1] ] ``` function slice_arr(arr, n) { var newArr = []; for (let i = 0; i < arr.length / n; i++) { newArr[i] = arr.slice(n * i, n * (i + 1)) } return newArr } var newArr = slice_arr(arr, 5) console.log(newArr) ``` #### 第二种 找到二维数组中起始值的对应的下标 一维下标 arr[0,1,2] ``` var newArr = slice_arr(arr,3) console.log(newArr) function slice_arr(arr,len){ var arr_len = arr.length ; var pages= []; for(i=0;i<arr_len;i+=len){ pages.push(arr.slice(i,len+i)) } return pages } ``` #### 第三种 ``` var pages=[]; arr.forEach((ele,index)=>{ var page = Math.floor(index/3); if(!pages[page]){ pages[page]=[] } pages[page].push(ele) }) console.log(pages) ``` ## 5.查 ### 5.1 `indexOf ` 查询数组中值的下标 * arr.indexOf(value) ``` var arr = [1,2,3,4,5,6]; var index = arr.indexOf(5); console.log(index); //5 ``` ### 5.2 `slice `--截取(不改变数组) * arr.slice(startIndex,lastIndex) -->不包含lastIndex ``` var arr = [1,2,3,4,5,6]; var b = arr.slice(1,3); //查找下标1-3的值 console.log(b); // 2,3 console.log(arr); ``` ### 5.3 join 分隔符 将数据转成字符串 * join -->通过特定的分割符,把数组拼接成字符串 arr.join(separate) ``` var arr = ["green" , "yellow" , "red"]; var str = arr.join(",") // " " "/" var str1 = arr.join("|"); console.log(str) console.log(str1) ``` ### 5.4 `max` 查找最大值 #### 方法一 > JavaScript内部封装的函数 Math ``` <script> var arr = [1,2,3,4,0]; function getMax(arr){ var max = arr[0]; for(let i = 0;i<arr.length;i++){ if(max<arr[i]){ max = arr[i]; } }return max; } console.log(getMax(arr)); // ... 展开语法 /*var max = Math.max(...arr); var min = Math.min(...arr); console.log(min); console.log(max); */ </script> ``` #### 方法二 ``` var arr = [44,66,3,7]; var max = Math.max.apply(null,arr) console.log(max); console.log(arr.constructor == Array); ``` #### 方法三 向数组中添加一个方法 ``` var arr = [1,3,34,2] /* Array.prototype.max = function(arr){ return Math.max(...arr); } */ Array.prototype.max = (arr=>Math.max(...arr)) console.log(arr.max(arr)); ``` #### 拓展 展开语法 `...` ``` function go(x,y,z){ console.log(x+y+z); } var arr = [1,2,3]; // go(arr[0],arr[1],arr[2]); go(...arr); console.log(...arr); ``` ``` /* var arr = [1,2,3]; var b = [...arr,..."hello"]; console.log(b); */ //对象的展开 var obj = { name:"cheng", age:19 } var wang = {...obj}; console.log(wang); ``` ## 6数组升/降序 ``` var arr = [33,22,14,4,6,88,77]; var copyArr = [...arr]; /* var d = arr.sort((a,b)=>{ return a-b; }) */ var d = arr.sort((a,b)=>{ return b-a; }); var e = copyArr.sort((a,b)=>a-b); console.log(d); console.log(e); ``` ## 7.求和 ``` var arr = [1, 2, 3, 4]; /* var sum = arr.reduce(function(a,b){ return a+b; }) */ var sum = arr.reduce((a, b) => a + b); console.log(sum); ``` ## 8. reverse ``` /* reverse 颠倒,反向输出 */ let arr = [1,2,3,4]; arr.reverse(); console.log(arr); ```