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

数组去重函数uniquifyArray未返回去重新数组问题求助

问题分析

原函数的核心错误在于判断条件newArray[i] !== arrays[i]——这是在比较两个数组相同索引位置的元素,而非检查当前元素是否已存在于新数组中。比如遍历到重复元素时,newArray[i]大概率是undefined(新数组长度始终短于原数组),导致条件永远为真,所有元素都会被推入新数组,完全起不到去重作用。

另外还有个细节问题:函数开头判断数组为空时返回null,通常更合理的是返回空数组[],避免后续处理null时触发不必要的错误。

修复方案

按照需求,我们可以用includes()或indexOf()方法检查元素是否已存在,两种方式都能实现正确去重:

方案1:使用includes()

const words = [
  'crab',
  'poison',
  'contagious',
  'simple',
  'bring',
  'sharp',
  'playground',
  'poison',
  'communion',
  'simple',
  'bring',
]

function uniquifyArray(arr) {
  if (arr.length === 0) {
    return []
  }

  const newArray = []
  for (let i = 0; i < arr.length; i++) {
    // 检查当前元素是否未被加入新数组
    if (!newArray.includes(arr[i])) {
      newArray.push(arr[i])
    }
  }
  return newArray
}

// 测试输出:["crab", "poison", "contagious", "simple", "bring", "sharp", "playground", "communion"]
console.log(uniquifyArray(words))

方案2:使用indexOf()

function uniquifyArray(arr) {
  if (arr.length === 0) {
    return []
  }

  const newArray = []
  for (let i = 0; i < arr.length; i++) {
    // indexOf返回-1表示元素不存在于新数组
    if (newArray.indexOf(arr[i]) === -1) {
      newArray.push(arr[i])
    }
  }
  return newArray
}
可选优化(ES6+环境)

如果你的运行环境支持ES6及以上,用Set可以写出更简洁的去重代码:

function uniquifyArray(arr) {
  return arr.length === 0 ? [] : [...new Set(arr)]
}

Set会自动过滤重复元素,再通过扩展运算符...转回数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:50:35