三、二维数组
下面是定义二维数组与进行遍历的方式:
<script> //定义二维数组 var arr = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ]; //遍历二维数组 for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { console.log(arr[i][j]); } } </script>
四、浅克隆与深克隆
这里的深浅克隆指的是对数组进行克隆。
浅克隆:只克隆数组的第一层,如果是多维数组,或者数组中的项是其他引用类型值,则不克隆其他层。
深克隆:克隆数组的所有层,要使用递归技术。
下面这种形式非浅克隆与深克隆:
<script> var arr = [1,2,3,4]; var arr1 = arr; //该方式是在进行赋值引用 </script>
浅克隆
通过使用循环遍历数组并进行push操作的就是浅克隆的方式:
<script> var arr = [1, 2, 3, 4]; var newArr = []; //进行浅克隆 for (let i = 0; i < arr.length; i++) { newArr.push(arr[i]); } console.log(newArr);//Array(4) [ 1, 2, 3, 4 ] console.log(arr == newArr);//false </script>
该种方式若是克隆如这类形式的var arr = [1, 2, 3, [2,2,2,2]];,数组中带有引用类型的使用该方式就仅仅只是克隆了其引用地址,并没有真正克隆其值!
深克隆
针对于如:var arr = [1, 2, 3, [2,2,2,2]];,这类数组进行深克隆应当使用递归的方式进行克隆。
代码如下:
<script> //针对于传入的值或数组进行深拷贝返回 function getNewArr(a) { //a为数组情况 if (Array.isArray(a)) { var newArr = []; for (let i = 0; i < a.length; i++) { if (Array.isArray(a[i])) { //遍历数组进行递归操作 newArr.push(getNewArr(a[i])); } else { newArr.push(a[i]); } } return newArr; } //a为基本类型值时直接返回 return a; } var arr = [1, 2, 3, [2, 2, 2, 2]]; var newArr = getNewArr(arr); console.log(newArr);//[1, 2, 3, [2, 2, 2, 2]] console.log(arr == newArr); //false console.log(arr[3] == newArr[3]); //false | 克隆成功 </script>
五、高级用法
5.1、map方法
map包含映射的含义,最终映射出数组!
5.2、forEach()使用
Javascript数组Array的forEach方法
调用forEach()相当于对数组进行遍历,可编写对应的回调函数:有三个,分别为当前项,当前项索引以及数组本身
<script> const arr = [1,2,3,4]; arr.forEach((item,index,arr)=>{ console.log("item,index,arr=>",item,index,arr) }) </script>
5.3、some与every用法(简化forEach()版本)
语法介绍:
arr.some((ele)=>{ele.a>12}):一旦数组中有一个ele.a>12,那么就返回true。
arr.every((ele)=>{ele.a>12}):一旦数组中有一个ele.a<=12,那么就返回true。
需求背景:
当选中记录中一旦有一个有效,上面生效按钮不能进行使用;同理选中的中有一个作废作废按钮就不能使用。
//若是使用foreach就会很麻烦进行判断,不推荐 if(arr.length == 1 && arr[0].status!='Active'){ this.cancelBtnDis = true; }else if(arr.length == 1 && arr[0].status=='Active'){ this.activeBtnDis = true; }else{ this.cancelBtnDis = false; this.activeBtnDis = false; } //使用some或any语法,两条搞定,推荐 //判断当前状态是否为有效,activeBtnDis用来控制按钮是否使用 this.activeBtnDis = arr.some(ele=>ele.status == 'Active') //如果其中有一个ele.status == 'Active'就返回true,否则返回false this.cancelBtnDis = arr.some(ele=>ele.status != 'Active')
5.4、fill():填充数组
快速填充数组:添加20个对象
Array(20).fill({"name":"changlu","age":18})
注意问题
js在循环遍历数组中删除指定元素踩坑( foreach… for… for…in… )
1、使用arr.filter((ele)=>return xxx):过滤得到符合条件的所有元素。
let arr2 = [1,2,3] //调用filter方法会有返回值数组,该数组则为指定匹配内容,并不会对原始数组做操作,需要注意 arr2 = arr2.filter(ele=>{return ele<=2}) //[ 1, 2 ]
整理者:长路 时间:2021.6.9 status != ‘Active’) <br/> --- ## 5.4、fill():填充数组 快速填充数组:添加20个对象 ```js Array(20).fill({"name":"changlu","age":18})
[外链图片转存中…(img-a7yeAkuB-1651880225191)]
注意问题
js在循环遍历数组中删除指定元素踩坑( foreach… for… for…in… )
1、使用arr.filter((ele)=>return xxx):过滤得到符合条件的所有元素。
let arr2 = [1,2,3] //调用filter方法会有返回值数组,该数组则为指定匹配内容,并不会对原始数组做操作,需要注意 arr2 = arr2.filter(ele=>{return ele<=2}) //[ 1, 2 ]