数组的操作

140 阅读4分钟

数组,就是一个容器,存放我们的数据。

1. length属性

获取数组的长度,可以用于数组for循环遍历。

   let arr = [1,2,3,4,5];
   for(let i = 0; i<arr.length;i++){
       console.log(arr[i]);
   }

也可以用于获取数组的部分内容。
slice()方法,中文是:切片的意思,顾名思义,用来切取数组的部分数组内容,但是不改变原数组。 从开始位置,到结尾位置,从0开始计数,不包含尾部,所以简称:顾头不顾尾。

   let arr = [1,2,3,4,5];
   //获取索引位置 2到5 也就是 [2,5)这个区间内的数据
   let newArr = arr.slice(2,arr.length);
   console.log(newArr);
   //验证一下是否不改变原数组
   console.log(arr);

image.png

2.数组操纵

2.1 forEach遍历

它接收一个函数,这个函数有3个参数, item当前元素 key当前索引 array当前数组 ps:参数名可以自定义。 既然是一个函数,那么我们也可以使用箭头函数的形式。
①匿名函数

   let arr = [1,2,3,4,5];
   arr.forEach(function(item,key,array){
       console.log("当前元素:"+item,"当前索引值:"+key,"当前数组"+array);
   })

②箭头函数

   let arr = [1,2,3,4,5];
   arr.forEach((item,key,array)=>{
       console.log("当前元素:"+item,"当前索引值:"+key,"当前数组"+array);
   })

image.png

这里有一个细节:对于当前数组的打印,打印出来是一个字符串 1,2,3,4,5 这是为什么???
由于前面带有 字符串"当前数组" 这里涉及到 +运算符
由于 +运算符,会把array的内容转成字符串,那么等价于 array.toString() 然后进行字符串的拼接操作

2.2 filter过滤

它接收一个函数,这个函数有3个参数,也是item key array。返回一个新数组。
虽然它用于过滤,但是也可以用于数组的遍历。不过一般用于数组的过滤操作
它这个 return 是返回一个boolean值

   let arr = [1,2,3,4,5];
   let newArr = arr.filter((item,key,array)=>{
       //true代表要,过滤出索引>-1的元素
       return key>-1;
   })
   console.log(newArr);
去重操作

indexOf(item,index) 方法先要知道,它是从 index索引位置开始,找元素item,找到了返回它的位置。
那么结合下面例子return这里,array数组就是arr数组,找item,也就是每次arr的数组内容。
大致流程
①item=1,key=0,array=[1,2,3,4,5,2,1,3],然后array.indexOf(1,0)从索引0的位置开始找内容1,找到了返回它的位置0,0===0为true,过滤出这个item元素1
②item=2,key=1,array=[1,2,3,4,5,2,1,3],然后array.indexOf(2,0)从索引0的位置开始找内容2,找到了返回它的位置1,1===1为true,过滤出这个item元素2
...
item=2,key=5,array=[1,2,3,4,5,2,1,3],然后array.indexOf(2,0)从索引0的位置开始找内容2,找到了返回它的位置1,1===5为false,不要这个位置上的元素
...

   let arr = [1,2,3,4,5,2,1,3];
   let newArr = arr.filter((item,key,array)=>{
       return array.indexOf(item,0)===key;
   })
   console.log(newArr);

image.png

2.3 map遍历

它接收一个函数,这个函数有3个参数,也是item key array。返回一个新数组。
它这里的return 是返回一个逻辑操作,比如 item*2 每个数据扩大两倍

   let arr = [1,2,3,4,5]; 
   let newArr = arr.map((item,key,array)=>{ 
        //什么都不操作,直接返回
        return item;
   }) 
   console.log(newArr);

比如:字符串数组转成数字数组

   let arr = ['1','2','3','4','5']; 
   let newArr = arr.map((item,key,array)=>{ 
        return Number(item);
   }) 
   console.log(newArr);

可以简写:

   let arr = ['1','2','3','4','5']; 
   let newArr = arr.map(Number); 
   console.log(newArr);

注意点:虽然我们可以简写,但是得注意,实际上三个参数item,key,array依旧是传给了Number()方法的,只是它只有了一个参数,也就是item参数 换个parseInt()方法来简写

   let arr = ['1','2','3','4','5']; 
   let newArr = arr.map(parseInt); 
   console.log(newArr);

image.png
为什么结果是这样??? 实际它就是返回了 parseInt('1',0) parseInt('2',1) ... 这个涉及parseInt()方法,以及进制转换问题!

3.常用方法

3.1 push & pop

尾部追加/删除 元素

   let arr = [1,2,3,4,5];
   arr.push(9);
   console.log(arr);
   arr.pop();
   console.log(arr);

image.png

3.2 unshit & shit

头部追加/删除 元素

   let arr = [1,2,3,4,5];
   arr.unshit(9);
   console.log(arr);
   arr.shit();
   console.log(arr);

image.png

3.3 splice(index,count,【item1,...】)

这个方法具有 添加/修改/删除 的功能。 从 index索引位置开始,删除count个元素,(可以)追加内容item1,...代表不定参数

   let arr = [1,2,3,4,5];
   //从索引5位置开始,不删除元素,添加数字6
   arr.splice(5,0,6);
   console.log(arr);
   //从索引5位置开始,删除1个元素,添加数字9
   arr.splice(5,1,9);
   console.log(arr);
   //从索引5位置开始,删除1个元素
   arr.splice(5,1);
   console.log(arr);

image.png

3.4 join()

将数组转成字符串,传入 一个字符串 做分隔符

   let arr = [1,2,3,4,5];
   let str = arr.join("&");
   console.log(str);

image.png