js多种数组去重方法

发布时间:2024年01月17日

推荐首用:? 送上一段在1000000个随机数测试,执行时长为9ms的代码,仅供参考

const arr = [1, 4, 5, 6, 7, 4, 6, 7, 6, 7, 8, 98, 5, 3, 2, 1, 0, 9];

const uniqueArr = Object.keys(
  arr.reduce((pre, cur) => {
    pre[cur] === undefined && (pre[cur] = true);
    return pre;
  }, {})
);
console.log(uniqueArr); //["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "98"];

数组去重,虽然是前端开发,但也至少关注下时间复杂度/空间复杂度。后面介绍的几个方法都是O(n^2)的方法。经过实测,在1000000个随机数测试的情况下,原生Set方法为21ms,后面三个方法都在1s以上,其中使用filter+indexOf的方法达到了2s

1、使用 Set:Set 是 ES6 引入的新数据结构,它只存储唯一值。通过将数组转换为 Set,然后再将其转回为数组,就能实现去重。

const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr);  // [1, 2, 3, 4, 5]

2、使用 filter:使用 Array 的 filter 方法,遍历数组并返回一个新数组,只包含满足指定条件的元素

const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.filter((value, index, self) => {
  return self.indexOf(value) === index;
});
console.log(uniqueArr);  // [1, 2, 3, 4, 5]

3、使用 reduce:使用 Array 的 reduce 方法,遍历数组并根据指定条件添加元素到新数组中。

const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.reduce((prev, current) => {
  if (!prev.includes(current)) {
    prev.push(current);
  }
  return prev;
}, []);
console.log(uniqueArr);  // [1, 2, 3, 4, 5]

4、使用 includes 或 indexOf:使用 Array 的 includes 或 indexOf 方法,判断元素是否已经存在于数组中,若不存在则添加到新数组中。

const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [];
arr.forEach((value) => {
  if (!uniqueArr.includes(value)) {
    uniqueArr.push(value);
  }
});
console.log(uniqueArr);  // [1, 2, 3, 4, 5]

文章来源:https://blog.csdn.net/weixin_52663662/article/details/135642719
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。