JavaScript数组去重

  • 当前元素的下标,和从数组里找到该元素的下标一样时,说明是第一次出现
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); 

参考文章推荐:
数组去重

你可能感兴趣的:(JavaScript数组去重)