使用javascript过滤器的两个数组之间的差异

时间:2015-08-06 19:47:56

标签: javascript

问题: 比较两个数组并返回一个新数组,其中包含两个原始数组中都找不到的任何项。使用Array.filter和Array.indexOf来解决这个问题。

function arrayNotContains(element){
    var arr = [1, 2, 3, 5];
    if(arr.indexOf(element) === -1){
        return true;
    }else{
        return false;
    }   
}

var filtered = [1, 2, 3, 4, 5].filter(arrayNotContains);
console.log(filtered);

我不知道该怎么办。我的解决方案与上述不同,并使用硬编码阵列。我如何使我的通用?

var arr1 = [1,2,3,5];
var arr2 = [1,2,3,4,5];

var filtered = arr2.filter(function(num) {
    if (arr1.indexOf(num) === -1) return num;
});

我在下面再找到一个解决方案。那可以吗?

{{1}}

1 个答案:

答案 0 :(得分:4)

您需要使用closure

function notContainedIn(arr) {
    return function arrNotContains(element) {
        return arr.indexOf(element) === -1;
    };
}

var filtered = [1, 2, 3, 4, 5].filter(notContainedIn([1, 2, 3, 5]));
console.log(filtered); // [4]

请注意,这只是解决方案的一般化版本,我并不是说这实际上是symmetric diff函数的有效解决方案。为此,正如您的问题中所述,您需要执行类似

的操作
function symmDiff(a, b) {
    return a.filter(notContainedIn(b)).concat(b.filter(notContainedIn(a)));
}