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


白猪掌柜的
浏览 154回答 1
1回答

函数式编程

如果我理解正确的话,你想要找到的区别arr1和arr2,并返回该差异(如有的话)的项目(即要么是数组中的不同)的一个新的数组。有多种方法可以实现这一点。一种方法如下:function diffArray(arr1, arr2) {&nbsp; const result = [];&nbsp; const combination = [...arr1, ...arr2];&nbsp;&nbsp;&nbsp; /* Obtain set of unique values from each array */&nbsp; const set1 = new Set(arr1);&nbsp; const set2 = new Set(arr2);&nbsp; for(const item of combination) {&nbsp; &nbsp; /* Iterate combined array, adding values to result that aren't&nbsp; &nbsp; present in both arrays (ie exist in one or the other, "difference") */&nbsp; &nbsp; if(!(set1.has(item) && set2.has(item))) {&nbsp; &nbsp; &nbsp; result.push(item);&nbsp; &nbsp; }&nbsp; }&nbsp; 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 []");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript