JavaScript数组去重方法

JavaScript数组去重方法

1. 使用Set和展开运算符(最简洁方法)

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

2. 使用filter方法

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

3. 使用哈希表(对于大型数组更高效)

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

4. 结合哈希表和线性搜索(适用于混合类型数组)

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);
    });
}

5. 排序后去重(不适用于对象)

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

6. ES6方法

const uniq = a => [...new Set(a)];

注意事项

  • Set方法简洁高效,但仅适用于ES6及以上版本。
  • filter方法简单易懂,但对大型数组效率较低。
  • 哈希表方法效率高,但可能无法区分数字和数字字符串。
  • 结合哈希表和线性搜索的方法更通用,但相对复杂。
  • 排序方法可能会改变原数组顺序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值