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

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

Linda Hamilton
Linda Hamilton原创
2024-12-19 19:03:101060浏览

How to Remove Duplicate Values from a JavaScript Array?

从 JS 数组中删除重复值

使用 JavaScript 数组时,通常需要删除重复值。可以采用多种方法来实现此目的,而无需更改原始数组。

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

最直接的方法是使用 Set构造函数和展开语法:

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

这会从数组创建一个新的 Set,它会自动删除重复项。然后,扩展语法将 Set 转换回数组。

过滤唯一元素

另一个选项是根据 indexOf 方法过滤数组:

const uniqueArray = a.filter(function(item, pos) {
    return a.indexOf(item) == pos;
});

此方法迭代数组并检查每个元素的第一次出现是否与其位置匹配。只有唯一元素才会满足此条件。

使用对象进行哈希处理

为了提高效率,可以使用使用对象进行哈希处理:

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

这种方法维护一个哈希表来快速检查重复值,确保线性时间

排序和过滤

如果输入数组已排序,则可以通过排序然后过滤掉连续的相等元素来删除重复项:

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

自定义独特Criteria

要根据特定条件过滤重复项,可以使用回调函数:

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

关键回调允许自定义比较,并能够根据更复杂的情况删除重复项逻辑。

保留第一个或最后一个出现次数

在某些情况下,可能需要保留重复元素的第一次或最后一次出现:

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()
    ]
}

uniqByKeepFirst 函数利用 Set 来维护唯一键,而 uniqByKeepLast 使用 Map 来保留与每个键关联的最后遇到的值。

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

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