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

新手求助:JS嵌套循环提取数组相似元素时重复输出数组的修复

解决两个数组提取相似元素时多次输出数组的问题
  • 问题根源在于你把打印语句写在了匹配成功的判断逻辑里:每找到一个相同元素,就会立刻打印一次当前的threeArr,所以找到90时打印[90],找到55时打印[90, 55],自然会输出两个数组。

  • 把console.log(threeArr)移到循环外面即可,等所有匹配完成后再打印最终结果:

let onArr = [90, 66, 97, 55]
let twoArr = [90, 77, 55, 80]
let threeArr = []

for (let i = 0; i < onArr.length; i++) {
  for (let j = 0; j < twoArr.length; j++) {
    if (onArr[i] === twoArr[j]) {
      threeArr.push(onArr[i])
    }
  }
}
console.log(threeArr) // 只会打印一次最终结果:[90, 55]
  • 额外优化:如果原数组存在重复元素,想避免结果数组出现重复值,可以在push前先检查元素是否已经存在于结果数组中:
let onArr = [90, 66, 97, 55, 90]
let twoArr = [90, 77, 55, 80]
let threeArr = []

for (let i = 0; i < onArr.length; i++) {
  for (let j = 0; j < twoArr.length; j++) {
    if (onArr[i] === twoArr[j] && !threeArr.includes(onArr[i])) {
      threeArr.push(onArr[i])
    }
  }
}
console.log(threeArr) // 输出 [90, 55],不会重复添加90
  • 更简洁的ES6写法:用filter和includes一行搞定,需要去重的话配合Set使用:
let onArr = [90, 66, 97, 55]
let twoArr = [90, 77, 55, 80]
// 基础版
let threeArr = onArr.filter(item => twoArr.includes(item))
// 去重版
let uniqueThreeArr = [...new Set(onArr.filter(item => twoArr.includes(item)))]
console.log(threeArr) // [90, 55]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:30:19