数组去重

1. 使用Set,但是任意两个对象对于Set来说都是不同的,两个NaN对于Set来说也是相等的,不可去重的。

const arr1 = [1, 2, 4, 6, 2, 5];
// 返回一个新的数组(去重后的数组)
function arrayUnique(arr) {
  return [...new Set(arr)];
}
// 过程
console.log(new Set(arr1)) // Set(5) {1, 2, 4, 6, 5}
console.log(...new Set(arr1)) // 1 2 4 6 5
console.log([...new Set(arr1)]) // [1, 2, 4, 6, 5]
console.log(arr1) // [1, 2, 4, 6, 2, 5]

2. 通过遍历数组去重。

const arr2 = [{ id: 1, name: 'a'}, { id: 2, name: 'a'},{ id: 1, name: 'a'},{ id: 3, name: 'a'},{ id: 5, name: 'a'},{ id: 2, name:'a'}];
function arrayUnique(arr, attrName) {
  let map = new Map();
  for (let item of arr) {
    if (!map.has(item[attrName])) {
      map.set(item[attrName], item);
    }
  }
  return [...map.values()];
}
arrayUnique(arr2, 'id');
console.log(map);
// Map(4) {
//   1 => { id: 1, name: 'a' },
//   2 => { id: 2, name: 'a' },
//   3 => { id: 3, name: 'a' },
//   5 => { id: 5, name: 'a' }
// }
console.log(...map); // [ 1, { id: 1, name: 'a' } ] [ 2, { id: 2, name: 'a' } ] [ 3, { id: 3, name: 'a' } ] [ 5, { id: 5, name: 'a' } ]
console.log(...map.values()); // { id: 1, name: 'a' } { id: 2, name: 'a' } { id: 3, name: 'a' } { id: 5, name: 'a' }
console.log([...map.values()]);
// [
//   { id: 1, name: 'a' },
//   { id: 2, name: 'a' },
//   { id: 3, name: 'a' },
//   { id: 5, name: 'a' }
// ]
posted @ 2021-12-08 11:19  远看山有色  阅读(38)  评论(0)    收藏  举报