JS对象数组去重

方法一

map+filter

console.time('f1');
function objDuplicate(obj) {
  var map = new Map();
  return obj.filter((item) => {
    if (!map.has(JSON.stringify(item))) {
      map.set(JSON.stringify(item), item);
      return true;
    }
  });
}
objDuplicate(obj);
console.timeEnd('f1');

方法二

借鉴:https://juejin.cn/post/6984625612937773070#comment

console.time('f2');
function uniqueArr(arr) {
  const res = [];
  arr.forEach((item) => {
    if (typeof item === 'object' && item !== null) {
      const tmp = res.filter((i) => JSON.stringify(i) === JSON.stringify(item));
      if (tmp.length === 0) {
        res.push(item);
      }
    }
  });
  return res;
}
uniqueArr(obj);
console.timeEnd('f2');

顺便记录一下数组的去重

ES6中去重

let arrs = [1, 10, 1, 2, 2, 4, 5, 1, 9, 10];
console.log([...new Set(arrs)]);

indexOf+for

function dunplicate(arr) {
  let res = [];
  for (let i = 0; i < arr.length; i++) {
    if (res.indexOf(arr[i]) === -1) {
      res.push(arr[i]);
    }
  }
  return res;
}

map

function dunplicate(arr) {
  var map = new Map();
  var res = [];
  for (let i = 0; i < arr.length; i++) {
    if (!map.has(arr[i])) {
      map.set(arr[i], 1);
      res.push(arr[i]);
    }
  }
  return res;
}

先排序后去重

function dunplicate(arr) {
  var res = [];
  arr.sort((a, b) => a - b);
  console.log(arr);
  var end = arr[0];
  res.push(arr[0]);
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] != end) {
      res.push(arr[i]);
      end = arr[i];
    }
  }
  return res;
}

其他方法

function dunplicate(ar) {
  for (var i = 0; i < ar.length; i++) {
    for (var j = i + 1; j < ar.length; j++) {
      if (ar[j] == ar[i]) {
        ar.splice(j, 1);
        j--;
      }
    }
  }
  return arrs;
}
let arrs = [1, 10, 1, 2, 2, 4, 5, 1, 9, 10];
// console.log([...new Set(arrs)]);
console.log(dunplicate(arrs));

//有缺陷,当数组中存放1和‘1’会默认去掉其中一个,从而达不到想要的效果
let a = [, 2, 13, 1, 2, 1, '1', '1'];
const delre = (arr) => {
  let obj = {};
  arr = arr.reduce(function (item, next) {
    obj[next.key] ? '' : (obj[next.key] = true && item.push(next));
    return item;
  }, []);
  return arr;
};
console.log(delre(a));

let arrs = [1, 10, 1, 2, 2, 4, 5, 1, 9, 10];
function dunplicate(arr) {
  return arr.filter((item, i, arr) => {
    return arr.indexOf(item) === i;
  });
}
console.log(dunplicate(arrs));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值