首页 >web前端 >js教程 >如何有效地从 JavaScript 数组中删除重复值?

如何有效地从 JavaScript 数组中删除重复值?

DDD
DDD原创
2025-01-03 12:13:41654浏览

How Can I Efficiently Remove Duplicate Values from JavaScript Arrays?

在 JavaScript 中从数组中删除重复值

您是否正在处理可能包含重复项的数组,并且需要仅使用以下内容创建一个新数组独特的价值观?这是解决此常见问题的多种方法的综合指南。

TL;DR:使用 ES6 Set 和 Spread 语法

const uniq = [...new Set(array)];

“智能”但天真的方法(二次时间)

const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);

哈希表来救援(线性时间)

const uniq = (a) => {
  const seen = {};
  return a.filter((item) => {
    return seen.hasOwnProperty(item) ? false : (seen[item] = true);
  });
};

两全其美(线性时间)时间)

const uniq = (a) => {
  const prims = { boolean: {}, number: {}, string: {} }, objs = [];
  return a.filter((item) => {
    const type = typeof item;
    if (type in prims) {
      return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true);
    } else {
      return objs.indexOf(item) >= 0 ? false : objs.push(item);
    }
  });
};

排序和过滤(线性时间)

const uniq = (a) => {
  return a.sort().filter((item, pos, ary) => !pos || item !== ary[pos - 1]);
};

按键唯一(基于回调过滤)

const uniqBy = (a, key) => {
  const seen = {};
  return a.filter((item) => {
    const k = key(item);
    return seen.hasOwnProperty(k) ? false : (seen[k] = true);
  })
};

保存第一次或最后一次出现(使用 Set 或 Map)

const uniqByKeepFirst = (a, key) => {
  const seen = new Set();
  return a.filter((item) => {
    const k = key(item);
    return seen.has(k) ? false : seen.add(k);
  });
};

const uniqByKeepLast = (a, key) => {
  return [...new Map(a.map((x) => [key(x), x]))].values();
};

选择符合您的数组类型和性能要求的方法。

以上是如何有效地从 JavaScript 数组中删除重复值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn