首页 > 解决方案 > 有人可以解释我试图比较 2 个数组的代码有什么问题吗?

问题描述

我正在尝试比较 2 个数组并返回一个新数组,其中包含仅在两个给定数组之一中找到的任何项目。所以这就是我得到的:

function diffArray(arr1, arr2) {
  var newArr = [];
  var max;
  var test;
  (arr1.length > arr2.length) ? (max = arr1, test = arr2) : (max = arr2, test = arr1);
  for (let i = 0; i < test.length; i++) {
    if (max.indexOf(test[i]) === -1) {
      newArr.push(test[i])
    }
  }
  return newArr;
}

console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));

但是,当我运行它时, newArr 返回一个空数组。有人可以指出错误吗?

标签: javascript

解决方案


function diffArray(arr1, arr2) {
  var newArr = [];
  let checkArr = [];
  for (const val of arr1) {
    checkArr[val] = 0
  }
  for (const val of arr2) {
    checkArr[val] = checkArr[val] !== undefined ? checkArr[val] + 1 : 0
  }
  for (const val of arr1) {
    if (checkArr[val] === 0) {
        newArr.push(val)
    }
  }
  for (const val of arr2) {
    if (checkArr[val] === 0) {
        newArr.push(val)
    }
  }
  return newArr;
}

console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));


推荐阅读