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

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

Mary-Kate Olsen
发布: 2024-12-20 13:00:26
原创
702 人浏览过

How to Efficiently Remove Duplicate Values from a JavaScript Array?

从 JS 数组中删除重复值

从 JavaScript 数组中删除重复值可能是一项常见任务,尤其是在处理可能包含冗余条目的数据时。有多种方法可以有效地实现此目的,具体取决于数据的性质和性能考虑因素。

使用 Set 构造函数和展开语法

此方法利用内置的 Set 构造函数和展开语法创建仅包含原始数组中唯一值的新数组的语法:

const uniq = [...new Set(array)];
登录后复制

“聪明”但天真way

此方法使用 filter() 方法迭代数组并检查每个元素的第一次出现是否与其在数组中的当前位置匹配。位置不匹配的元素被视为重复:

const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
登录后复制

哈希表来救援

哈希表提供了一种使用键值对检测重复元素的有效方法。在这种方法中,每个元素都被添加到哈希表中,并立即检查元素是否存在:

function uniq(a) {
  const seen = {};
  return a.filter((item) => {
    return seen.hasOwnProperty(item) ? false : (seen[item] = true);
  });
}
登录后复制

两个世界中最好的

结合前两个的优点方法,该解决方案利用哈希表作为原始值并线性搜索对象:

function 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);
  });
}
登录后复制

排序 | uniq

在删除重复项之前对数组进行排序可以简化过程:

function uniq(a) {
  return a.sort().filter((item, pos, ary) => !pos || item != ary[pos - 1]);
}
登录后复制

唯一...

当您需要根据特定条件删除重复项时,例如对象的属性,可以向 uniqBy() 方法提供回调函数:

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

首先还是最后一个?

如果您只想保留第一次或最后一次出现的重复对象,可以使用 Set 或 Map 数据结构:

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

function uniqByKeepLast(a, key) {
  return [...new Map(a.map((x) => [key(x), x])).values()];
}
登录后复制

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板