取两个数组并仅返回唯一值

时间:2016-12-06 13:42:15

标签: javascript arrays

我一直在寻找(更好)的方法来做到以下几点。取两个数组并仅返回唯一值。例如。 [' value1',' value2']和[' value2',' value3']应返回' value1'和' value3'。以下似乎有效,但我想知道是否有更简单/更简洁的方法来实现相同的结果。

function diffArray(arr1, arr2) {
  var newArr = arr1.filter(function(a) {
    var count = 0;
    arr2.forEach(function (x) {
      if (x === a) {count++;}
    });
    if (count !== 0) {return false;}
    return true;
  }).concat(arr2.filter(function(b) {
    var count = 0;
    arr1.forEach(function(y) {
      if (y === b) {count++;}
    });
    if (count !== 0) {return false;}
    return true;
  }));
  return newArr;
}

console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));
//Should return only 4.

2 个答案:

答案 0 :(得分:1)

如果您可以使用库我建议使用lodash。 对此有一个通用的N数组操作。

_.xor([2, 1], [2, 3]);

https://lodash.com/docs/4.17.2#xor

答案 1 :(得分:1)

Th0rndike的答案的固定版本:



var a1=[1,2];
var a2=[2,3];

function diffArray(a1,a2){
    return a2.filter(function(item){
       return a1.indexOf(item) < 0;
    }).concat(a1.filter(function(item){
       return a2.indexOf(item) < 0;
    }));
}

console.log(diffArray(a1,a2));
&#13;
&#13;
&#13;