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

JavaScript中判断嵌套数组相等报错,如何实现数组去重?

问题解答

为什么会报错?

JavaScript的原生数组没有内置equals()方法,这个方法是Java等其他语言的数组/集合专属方法,直接调用自然会提示“is not a function”。

另外你提到==运算符不好用,是因为数组属于引用类型,==和===比较的是两个数组在内存中的引用地址,而非数组内容。哪怕两个数组元素完全一致,只要是不同的数组实例,结果都会是false。

解决方法

方法1:自定义数组内容比较函数

自己实现一个函数,逐个比对数组的每一个元素(你的数组元素都是数字,逻辑非常简单):

// 自定义数组内容相等判断函数
function arraysEqual(a, b) {
  if (a.length !== b.length) return false;
  for (let i = 0; i < a.length; i++) {
    if (a[i] !== b[i]) return false;
  }
  return true;
}

// 修改后的去重函数
function removeDuplicates(arr) {
  const tempArr = [];
  for (let i = 0; i < arr.length; i++) {
    let found = false;
    for (let j = 0; j < tempArr.length; j++) {
      // 用自定义函数替代equals
      if (arraysEqual(tempArr[j], arr[i])) {
        found = true;
        break; // 找到重复就跳出循环,节省性能
      }
    }
    if (!found) {
      tempArr.push(arr[i]);
    }
  }
  return tempArr; // 注意:你原函数漏了返回结果
}

方法2:用JSON.stringify+Set简化去重

利用字符串可被Set直接比较的特性,把数组转成字符串去重后再转回数组,代码更简洁:

function removeDuplicates(arr) {
  const uniqueStrs = new Set(arr.map(item => JSON.stringify(item)));
  return Array.from(uniqueStrs, str => JSON.parse(str));
}

这个方法适合你的场景(数组元素都是数字、无特殊值),如果数组里包含undefined、function这类无法被JSON序列化的内容,就不适用了。


内容的提问来源于stack exchange,提问作者Eli Bauer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:21:07