- 当前元素的下标,和从数组里找到该元素的下标一样时,说明是第一次出现
const deduped = [ 1, 1, 'a', 'a' ].filter( (el, i, arr) => arr.indexOf(el) === i);
console.log(deduped); // [ 1, 'a' ]
- ES6 Set类似于数组,成员值唯一,经过过滤则没有重复值
const deduped = Array.from( new Set([ 1, 1, 'a', 'a' ]) );
console.log(deduped); // [ 1, 'a' ]
这两种当数组元素是对象或数组时,不起作用,因为对象存储的是引用,而变量存储的是值
- 这种方法可以过滤任意类型的
function dedup(arr) {
const hashTable = [];
return arr.filter(function (el) {
const key = JSON.stringify(el);
if(hashTable.includes(key)==false){
hashTable.push(key);
return hashTable;
}
else{
return false;
}
});
}
var deduped = dedup([
{ a: 1 },
{ a: 1 },
[ 1, 2 ],
[ 1, 2 ]
]);
console.log(deduped);
参考文章推荐:
数组去重