Javascript:如何找到两个数字数组的差异

标签 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]);

最佳答案

如果我没理解错的话,你想要找到 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 []");

关于Javascript:如何找到两个数字数组的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812598/

相关文章:

javascript - 如何直接在圆圈内写东西?

javascript - 如何在 2 列中显示多个 html 表格

javascript - 如何将单击/选定的行数据从一个表传递到并排放置的另一个表

javascript - 更改中心时传单 map 变灰

javascript - 克隆范围不起作用

php - 调用 javascript 函数,值在控制台中返回为未定义

javascript - fs.readFileSync 错误

javascript - 在js中将嵌套数组转换为JSON字符串?

javascript - 具有平滑滚动的 Jquery 航路点

javascript - React Native 自定义 TextInput 占位符