数组常用方法总结

97 阅读7分钟

对于初学者来说不断的学习不断的总结,才能提升自我,加油和我一样在前进的道路上不断的提升自己

1. push()

向数组的末尾添加新内容
参数:要添加的项。传递多个用逗号隔开,任何数据类型都可以
返回值:新增后数组的长度
是否改变原数组:改变

2. pop()

删除数组的最后一项
参数:无
返回值:被删除的项
是否改变原数组:改变

3. shift()

删除数组的第一项
参数:无
返回值:被删除的项
是否改变原数组:改变

4. unshift()

向数组首位添加新内容
参数:要添加的项,多项用','隔开
返回值:新数组的长度
是否改变原数组:改变

5. slice()

按照条件查找出其中的部分内容
参数:
array.slice(n, m),从索引n开始查找到m处(不包含m)
array.slice(n) 第二个参数省略,则一直查找到末尾
array.slice(0)原样输出内容,可以实现数组克隆
array.slice(-n,-m) slice支持负参数,从最后一项开始算起,-1为最后一项,-2为倒数第二项
返回值:返回一个新数组
是否改变原数组:不改变
let ary = [13,12,3,34,45,56,77,88,49]; 
//console.log(ary.slice(2,8));//从索引2开始查找到索引为8的内容,结果为[3,34,45,56,77,88] 
//console.log(ary.slice(0)); 
console.log(ary.slice(-2,-1));//[88]

6. splice()

对数组进行增删改
增加:ary.splice(n,0,m)从索引n开始删除0项,把m或者更多的内容插入到索引n的前面
返回空数组
修改:ary.splice(n,x,m)从索引n开始删除x个,m替换删除的部分
把原有内容删除掉,然后用新内容替换掉
删除:ary.splice(n,m) 从索引n开始删除m个内容
(如果第二个参数省略,则从n删除到末尾)
返回删除的新数组,原有数组改变
  //增加
  let ary6_z = [33,44,55,66,77,88];
  ary6_z.splice(2,0,'a','b')
  console.log(ary6_z);// [33, 44, "a", "b", 55, 66, 77, 88]
  //修改
  let ary6_x = [33,44,55,66,77,88];
  ary6_x.splice(1,2,'x','y')
  console.log(ary6_x);// [33, "x", "y", 66, 77, 88]
  //删除
   let ary6_s = [33,44,55,66,77,88];
   console.log(ary6.splice(3,2))//[66, 77]
   console.log(ary6_s.splice(3));//[66, 77, 88]

7. join()

用指定的分隔符将数组每一项拼接为字符串
参数:指定的分隔符(如果省略该参数,则使用逗号作为分隔符)
返回值:拼接好的字符串
是否改变原数组:不改变
let ary7 = [1,2,3];
console.log(ary7.join('、'));//1、2、3

8. concat()

用于连接两个或多个数组
参数:参数可以是具体的值,也可以是数组对象。可以是任意多个
返回值:返回连接后的新数组
是否改变原数组:不改变
let ary8 = ['你'];
let ary80 = ary8.concat('好');
console.log(ary80);//["你", "好"]

9. indexOf()

检测当前值在数组中第一次出现的位置索引
参数:array.indexOf(item,start) item:查找的元素 start:字符串中开始检索的位置
返回值:第一次查到的索引,未找到返回-1
是否改变原数组:不改变
let ary9 = ['a','b','c','d','e','a','f'];   
console.log(ary9.indexOf('c'));//2
console.log(ary9.indexOf('a',3))//5

10. lastIndexOf()

检测当前值在数组中最后一次出现的位置索引
参数:array.lastIndexOf(item,start) item:查找的元素 start:字符串中开始检索的位置
返回值:第一次查到的索引,未找到返回-1
是否改变原数组:不改变
let ary10 = ['a','b','c','d','e','a','f'];   
console.log(ary10.lastIndexOf('c'));//2
console.log(ary10.lastIndexOf('f',1))//-1

11. includes()

判断一个数组是否包含一个指定的值
参数:指定的内容
返回值:布尔值
是否改变原数组:不改变
let ary13 = ['a','b','c','d']; 
console.log(ary13.includes('c'));//true
console.log(ary13.includes(2));//false

12. sort()

对数组的元素进行排序(默认是从小到大来排序 并且是根据字符串来排序的)
参数:可选(函数) 规定排序规则 默认排序顺序为按字母升序
返回值:排序后新数组
是否改变原数组:改变
sort在不传递参数情况下,只能处理10以内(个位数)数字排序
let ary11 = [32,44,23,54,90,12,9]; 
ary11.sort(function(a,b){        // return a-b;  // 结果[9, 12, 23, 32, 44, 54, 90]
       // return b-a;  // 结果[90, 54, 44, 32, 23, 12, 9]   })  
console.log(ary11);

13. reverse()

把数组倒过来排列
参数:无
返回值:倒序后新数组
是否改变原数组:改变
let ary12 = [6,8,10,12]; 
console.log(ary12.reverse());//[12, 10, 8, 6]

14. split()

该方法是用过指定的分隔符,将字符串分割成数组。
返回值:返回一个新的数组
let str = wqz-ttj;
let arr = str.split('-');
console.log(arr);// arr=['wqz','ttj'];

15. forEach()

循环遍历数组每一项
参数:函数 ary.forEach(function(item,index,ary){}) item:每一项 index:索引 ary:当前数组
返回值:无
是否改变原数组:不改变
forEach中不能使用continuebreak,forEach中不能跳出,只能跳过(return跳过)
let ary14 = ['a','b','c','d']; 
let item = ary14.forEach(function(item,index,ary){
           console.log(item,index,ary);
           })

16. map( )

映射,该方法使用和forEach大致相同,但是该方法有返回值,返回一个新数组,新数组的长度和原数组长度相等
//里面的function是一个回调函数,
//item: 数组中的每一项;
//index:item 对应的下标索引值
//arr: 就是调用该方法的数组本身
用法:
let arr = [1,32,54,6,543];
let res = arr.map(function(item,index,arr){
	return item*2;
})

17. filter( )

filter方法: 有返回值, 过滤出符合条件的元素

let arr = [1, 3, 5, 2, 4, 6];
let res3 = arr.filter(function(item, index) {
  return item % 2 === 0;
});
console.log(res3);
过滤出布尔类型为true的项

let arr2 = [0, "", false, 1, 3, 4];
let res4 = arr2.filter(function(item, index) {
  return item;
});
console.log(res4);

18. some()

判断数组中有没有符合条件的项(只要有,就返回true),如果一个都没有,才返回false

let arr3 = [
  { name: "zs", age: 18, done: "notYet" },
  { name: "ls", age: 20, done: true },
  { name: "ww", age: 22, done: true }
];
let res5 = arr3.some(function(item) {
  return item.done;
});
console.log(res5);

19. every()

判断数组中所有的项是否满足要求,如果全都满足,才返回true,否则返回false

let res6 = arr3.every(function(item) {
  return item.done;
});
console.log(res6);

20. find()

找到符合条件的项,并且返回第一项

let arr4 = [
  { id: 3, name: "ls", done: false },
  { id: 1, name: "zs", done: true },
  { id: 2, name: "ww", done: true }
];
// var res7 = arr4.find(function(item) {
//   return item.done;
// });
// console.log(res7);

21. findIndex

找到符合条件的项的下标,并且返回第一个
返回值:当数组中的元素返回 true 时该方法会返回符合条件的元素的索引位置,之后的值不会再调用执行函数
      如果没有符合条件的元素返回 -1
是否改变原数组:不改变
var res8 = arr4.findIndex(function(item) {
  return item.done;
});
console.log(res8);

22. reduce

对数组中的每个元素执行一个由您提供的reduce函数(升序执行),将其结果汇总为单个返回值。reduce方法可做的事情特别多,就是循环遍历能做的,reduce都可以做,比如数组求和、数组求积、数组中元素出现的次数、数组去重等等

 arr.reduce(function(prev,cur,index,arr){...}, init);
    -prev 必需。累计器累计回调的返回值; 表示上一次调用回调时的返回值,或者初始值 init;
    -cur 必需。表示当前正在处理的数组元素;
    -index 可选。表示当前正在处理的数组元素的索引,若提供 init 值,则起始索引为- 0,否则起始索引为1;
    -arr 可选。表示原数组;
    -init 可选。表示初始值。

 **求和计算**
    第一次:pre–>1 next–>2 index–>1
    pre+next=1+2=3
    第二次:pre–>3 next–>3 index–>2
    pre+next=3+3=6
    第三次:pre–>6 next–>4 index–>3
    pre+next=6+4=10
    第四次:pre–>10 next–>5 index–>4
    var arr1 = [1,2,3,4,5] ;
    	var new1 = arr1.reduce(function(pre,next,index){
    			return pre+next ;
    		      //pre+next=10+5=15
    	})
    	console.log(new1);
            
**扁平化数组(拼接数组)**    
    var arr2 = [[1,2,3],[4,5],[6,7]] ;
    	var new2 = arr2.reduce(function(pre,next,index){
    			return pre.concat(next);	//前数组拼接后数组 .concat()
    	})
     	console.log(new2);
   

**对象数组叠加计算**
    var arr3 = [
    	{price:10,count:1},
    	{price:15,count:2},
    	{price:10,count:3}
    	];
    	var new3 = arr3.reduce(function(pre,next,index){
    			return pre+next.price*next.count;
    	},0)	//在原数组第一项添加为0,不改变原数组,则可不操作第一项
    	console.log(new3);


 应用 : 计算数组中每个元素出现的次数
    投票板
    var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    var countedNames = names.reduce(function (allNames, name) {
        // console.log(allNames, '| ' + name);
        if (name in allNames) {
          allNames[name]++;
        } else {
          allNames[name] = 1;
        }
        return allNames;
    }, {});
    console.log(countedNames);

案例使用

 let arr2 = [0, "", false, 1, 3, 4];
 let arr4=[3,7,0, 8,64,4]
 let res=arr2.filter(item=>!arr4.includes(item))
 console.log(res);//['', false, 1])