数组中的常见方法
变异方法(原数组会发生改变):pop、push、unshift、shift、reverse、sort、splice
非变异方法(原数组不会发生改变,返回一个新数组): slice、concat、join、indexOf、lastIndexOf、forEach
、es6中新增的方法(map、reduce、filter、some、any
)、扩展运算符
数组常见的遍历方法:
- forEach:无返回值
- map:
- reduce
- filter
- some
- every
- (…)
//forEach:无返回值,遍历数组中的每一项
let arr=[1,2,3,4,5];
let res=[];
let res2=arr.forEach((item,index)=>{
res.push(item*2)
return res
})
console.log(res2); //undefined
console.log(res); //[2,4,6,8,10]
console.log(arr); //[1,2,3,4,5]
//map:遍历数组中的每一项,有返回值
let arr=[1,2,3,4,5];
let res2=arr.map(item=>item*2)
console.log(res2); //[2,4,6,8,10]
console.log(arr); //[1,2,3,4,5]
//reduce:两个参数,第一个参数是一个函数,第二个参数是函数的初始值。
//遍历数组中的每一项,函数的第一个形参即为reduce的第二个参数,如果没有传入,则函数的两个形参分别为数组的第1,2个元素;如果传入,则该函数的两个形参分别为reduce的第二个形参和数组中的第一个元素;遍历过程中,将该函数的运算结果作为下一次该函数的第一个参数。
let arr=[1,2,3,4,5];
let res2=arr.reduce((a,b)=>a+b,0);
console.log(res2); //15
reduce传的第二个参数为0时的遍历过程 :
let res2=arr.reduce((a,b)=>{
console.log(a,b);
return a+b
});
reduce没有传第二个参数时的遍历过程
//filter:遍历数组中的每一项,将满足要求的元素以数组的形式返回,若没有满足要求的元素,则返回空数组
let arr=[1,2,3,4,5];
let res2=arr.filter(item=>item>2);
console.log(res2); //[3,4,5]
//every和some
//every:每一项都满足要求才返回true,否则flase
//some:只要有一项满足要求就返回true
let arr=[1,2,3,4,5];
let res2=arr.every(item=>item%2===0);
let res3=arr.some(item=>item%2===0);
console.log(res2); //false
console.log(res3); //true
实现一个小栗子:已知一个数组var arr = [[1, 3, 2, 1],[5, 3, 4, 8, 5, 6, 5],[6, 2, 8, 9, [4, 11, 15, 8, 9, 12, [12, 13, [10], 14]]], 16]
,用js编写一个程序将这个数组扁平化,并得到一个升序且无重复值的数组。得到最终结果为:[1,2,3,4,5,6,8,9,10,11,12,13,14,15,16]
。
var arr = [[1, 3, 2, 1],[5, 3, 4, 8, 5, 6, 5],[6, 2, 8, 9, [4, 11, 15, 8, 9, 12, [12, 13, [10], 14]]], 16];
function flatten(arr){
while(arr.some(Array.isArray)){
arr=[].concat(...arr)
}
return arr
}
let flatRes=flatten(arr);
let set=new Set(flatRes);
let temp=Array.from(set);
console.log(temp);
let res=temp.sort((a,b)=>a-b);
console.log(res)
数组扁平化可以看我的另一篇博客数组扁平化
下面主要介绍一下数组去重的几种方法:
1. 利用set的特点和Array.from()
var arr = [1,2,4,5,3,2,3,5,3];
let set=new Set(arr);
let temp=Array.from(set);
console.log(temp);//[1,2,4,5,3]
第一种方法无法去除重复‘{}’空对象
2.indexOf和lastIndexOf
var arr = [1,2,4,5,3,2,3,5,3];
for(let i=0;i<arr.length;i++){
if(arr.indexOf(arr[i])!==arr.lastIndexOf(arr[i])){
arr.splice(i,1);
i--;
}
}
console.log(arr);
3.利用reduce和indexOf
var arr = [1,2,4,5,3,2,3,5,3];
let res=arr.reduce((a,b)=>{
if(a.indexOf(b)===-1){
a.push(b)
}
return a
},[])
console.log(res)
4.利用filter
var arr = [1,2,4,5,3,2,3,5,3];
let res= arr.filter((item,index)=>{
return arr.indexOf(item)===index
})
console.log(res)