问题: 比较两个数组并返回一个新数组,其中包含两个原始数组中都找不到的任何项。使用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}}
答案 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)));
}