You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除二维数组中的重复元素?

如何去除二维数组中的重复元素?

看起来你已经找对了方向——用filter搭配findIndex来判断元素是不是第一次出现,但你的代码里有个小疏漏导致结果为空,我来帮你捋捋~

问题出在哪?

你写的findIndex里的箭头函数用了花括号包裹逻辑,但没有明确返回判断条件!箭头函数的规则是:如果用花括号{}包裹代码块,就必须手动写return来返回结果,不然函数会默认返回undefined。这样一来,findIndex永远找不到匹配的元素,返回的都是-1,自然所有元素都不满足=== index的条件,最后就得到空数组啦。

修正后的代码

我们只需要给findIndex里的判断逻辑加上return就可以了:

myarray = myarray.filter(
    (element, index, self) => self.findIndex((e) => {
        // 加上return返回判断结果
        return e[0] === element[0] && 
               e[1] === element[1] && 
               e[2] === element[2]
    }) === index
)

或者也可以简化箭头函数,去掉花括号,这样表达式会自动返回结果,代码更简洁:

myarray = myarray.filter(
    (element, index, self) => 
        self.findIndex(e => 
            e[0] === element[0] && 
            e[1] === element[1] && 
            e[2] === element[2]
        ) === index
)

更高效的替代方法

上面的方法时间复杂度是O(n²)(因为filter和findIndex都是遍历数组),如果你的数组很大,推荐用Set来优化,时间复杂度可以降到O(n):

const uniqueSet = new Set();
const uniqueArray = myarray.filter(item => {
    // 把子数组转成字符串作为唯一标识
    const key = JSON.stringify(item);
    if (!uniqueSet.has(key)) {
        uniqueSet.add(key);
        return true;
    }
    return false;
});

原理是:数组是引用类型,直接放进Set没法判断是否重复,所以我们把每个子数组转成JSON字符串(或者用item.join(',')也可以,只要能唯一标识子数组内容就行),用Set记录已经出现过的键,遍历一次就能完成去重。

备注:内容来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:04:29