数组去重
var arr=[2,3,2,5,8,9,3,1,2,3,3,5,2,9,2];
var arr2=[...new Set(arr)];
console.log(arr2);
[2,3,5,8,9,1]
这里利用了es6中Set中的成员都是唯一不重复的特性
扩展运算符( spread )是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
数组过滤
需求1:找出数组中小于5的值。
我们可以用es6中的filter()这个方法,我们点进这个方法可以看到,这个方法需要在括号内写一个回调函数,并且返回的结果必须是布尔类型。
最后,这个方法会根据返回的布尔值,以数组的形式,将符合条件的值返回。
const arr=[2,3,2,5,8,9,3,1,2,3,3,5,2,9,2];
//将返回的数组接收
let reArr=arr.fliter(function(n){
//过滤条件
return n<5;
});
console.log(reArr);
[2,3,2,3,1,2,3,3,2,2]
需求2:将数组中的所有数乘2。
可以使用map()方法,大致用法和filter()相同
const arr=[2,3,2,5];
//将返回的数组接收
let reArr=arr.map(function(n){
//过滤条件
return n*2;
});
console.log(reArr);
[4,6,4,10]
需求3:将数组求和。
可以使用reduce()方法,注意reduce()函数和前两个函数稍微有点区别。
const arr=[20,40,80,100];
//将返回的数组接收
let total=arr.reduce(function(preValue,n){
return preValue+n;
},0);
console.log(total);
240
filter、map、reduce综合运用(链式调用)
需求:将数组中,小于100的数,乘以2再求和
const arr=[10,20,120,150,440,40,50];
//将返回的数组接收
let total=arr.filter(function(n){
return n<100;//这里找出了小于一百的数,存放进一个数组
}).map(function(n){
return n*2;//这里将数组乘以二
}).reduce(function(preValue,n){
return preValue+n;//求和
},0)
console.log(total);
如果使用箭头函数会更加简洁
const arr=[10,20,120,150,440,40,50];
//将返回的数组接收,注意最后reduce中的默认值0可以不写
let total=filter(n => n<100).map(n => n*2).reduce((preValue,n) => preValue+n)
console.log(total);
240