首页 > 解决方案 > Javascript:如何找到两个数字数组的差异

问题描述

我需要创建一个由来自两个单独数组的唯一元素组成的新数组。

我已将两个数组转换为一个数组,然后将其转换为一个对象以检查元素的频率。如果对象属性的值为 1(使其成为唯一属性),我想将其返回到数组(减去值)。有没有一种简单的方法来实现这一目标?

编辑:将结果移到 for 循环之外。预期输出应为 [4]

function diffArray(arr1, arr2) {
  var finalArr = [];
  var countObj = {};
  var newArr = [...arr1, ...arr2];
  for (var i = 0; i < newArr.length; i++) {
    if (!countObj[newArr[i]]) countObj[newArr[i]] = 0;
    ++countObj[newArr[i]];
  }
  for (var key in countObj) {
    if (countObj[key] === 1) {
      finalArr.push(key);
    }
  } return finalArr;
}

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

标签: javascript

解决方案


如果我理解正确,您希望找到 and 之间的差异arr1arr2并将该差异(如果有)返回为新的项目数组(在任一数组中都是不同的)。

有多种方法可以实现这一目标。一种方法如下:

function diffArray(arr1, arr2) {

  const result = [];
  const combination = [...arr1, ...arr2];
  
  /* Obtain set of unique values from each array */
  const set1 = new Set(arr1);
  const set2 = new Set(arr2);

  for(const item of combination) {

    /* Iterate combined array, adding values to result that aren't
    present in both arrays (ie exist in one or the other, "difference") */
    if(!(set1.has(item) && set2.has(item))) {
      result.push(item);
    }
  }
  return result;
}

console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]), " should be [4]");
console.log(diffArray([1, 2, 3, 5, 8], [1, 2, 3, 5]), " should be [8]");
console.log(diffArray([1, 2, 3, 5, 8], [1, 2, 3, 5, 9]), " should be [8, 9]");
console.log(diffArray([1, 2], [1, 2]), " should be []");


推荐阅读