为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2021-10-07 10:24:57
我需要创建一个由来自两个单独数组的唯一元素组成的新数组。我已将两个数组转换为一个数组,然后将其转换为一个对象以检查元素的频率。如果对象属性的值为 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]);
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

如果我理解正确的话,你想要找到的区别arr1和arr2,并返回该差异(如有的话)的项目(即要么是数组中的不同)的一个新的数组。


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


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


查看完整回答
反对 回复 2021-10-07
  • 1 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信