新手求助: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
相关产品推荐
相关产品推荐

