最近在freeCodeCamp上练手js算法题,发现有很多题目可以直接return一个链式调用的对象完成,恰巧赶上熟悉了filter方法,特此介绍
法一:
[需要去重的数组].filter( (item, index ,arr)=>arr.indexOf(item) === index )
意思是,对于重复的元素 传入indexOf方法,输出的是数组中第一次出现的下标而非它本身的下标,效果:
filter函数介绍:
filter是Array的原型方法,filter接受一个函数,函数可以传3个参数:分别是遍历到的元素对象,前者的下表和数组本身,如果函数返回真,就把该元素加到新数组中,遍历完成后,filter返回一个包含遍历是碰到每个return true对应元素的数组;
示例:
var array = [1,2,3,4,5,6,7,8,9];
var newArray = array.filter(function(item){
return item % 2 === 0;//保留偶数
});
console.log(newArray)//[2,4,6,8]
console.log(array)//不会改变原数组
法二,ES6中使用Set数据结构和...拓展运算符可以更加简洁地达到这个效果
[...new Set([1,1,1,1,1,2,3,3,3,3,3])] //[1,2,3]