JavaScript比较两个整数数组,嵌套循环输出全部元素问题排查
问题原因
你的代码逻辑存在判断错误:内层循环中只要firstArray[i]和当前遍历到的secondArray[j]不相等就直接打印,哪怕firstArray[i]实际存在于secondArray的其他位置,只要碰到任意一个不相等的secondArray元素都会触发打印。
比如firstArray[i]的值为2,secondArray同时包含2和3,当内层循环遍历到值为3的元素时,2!==3的判断就会触发打印,最终就会出现所有元素都被输出的问题。
解决方案
方案1:修复原有双重循环逻辑
你需要给每个firstArray的元素增加存在标记,遍历完整个secondArray确认不存在后再打印:
for (let i = 0; i < firstArray.length; i++) { // 标记当前元素是否在secondArray中存在 let isExist = false for (let j = 0; j < secondArray.length; j++) { if (firstArray[i] === secondArray[j]) { isExist = true // 匹配到就可以跳出内层循环,无需继续遍历 break } } // 遍历完整个secondArray都没找到匹配项再打印 if (!isExist) { console.log(firstArray[i]) } }
方案2:更高效的Set实现(推荐)
双重循环的时间复杂度为O(n*m),数组元素量大时性能较差,你可以将secondArray转为Set集合实现O(1)复杂度的查找,整体时间复杂度可优化到O(n+m):
// 将secondArray转为Set集合,用于快速查找 const secondSet = new Set(secondArray) // 过滤出firstArray中不存在于secondSet的元素,即差集 const diffArray = firstArray.filter(item => !secondSet.has(item)) // 打印差集元素 diffArray.forEach(item => console.log(item))
内容的提问来源于stack exchange,提问作者Adaen
相关产品推荐
相关产品推荐

