数组去重最简方法
es6实现:
[...new Set([1,2,3,1,'a',1,'a'])]; //方法一
Array.from(new Set(
[1,2,3,1,'a',1,'a'])); //方法二
第一个方法里“...”叫做扩展运算符,内部使用for...of
循环,所以也可以用于 Set 结构。
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
[... ]和Array.from( )都是把其他类型转换成数组。
es5实现:
方法一:
[1,2,3,1,'a',1,'a'].filter(function(ele,index,array){ return index===array.indexOf(ele) })
方法二:
Array.prototype.uniq = function () { let newarr=[] let hasNaN=true for(let i=0;i<this.length;i++){ if(this.indexOf(this[i])===i){ newarr.push(this[i]) } if(this[i]!=this[i]&&hasNaN){ // 去除NaN,因为NaN!=NaN newarr.push(this[i]) hasNaN=false } } return newarr }
只有处理了NaN,如下测试用例才能去重成功
[true, false, null, undefined, NaN, 0, 1, {}, {}, 'a', 'a', NaN]