我尝试使用拒绝函数查找数组中的缺失值:
var store = [0,1,2,3,4,5,6,7,8,15,16,18,20,21];
var fullArray= [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];
function reject(array, iteratorFunction) {
return array.filter(function(element) {
return !iteratorFunction(element)});
}
var missingValues = reject(fullArray, function(number){
return store.find(function(item){return number === item});
});
console.log(missingValues);
但我的结果显示:
[0,9,10,11,12,13,14,17,19]
在第一个值中显示 0。 为什么会发生这种情况以及如何解决?
最佳答案
store.find
返回它找到的元素。如果那是 0
,您的 iteratorFunction
将返回 0
,并且 !0
是 true
因为 0
是假的。
使用 Array#includes
进行正确的存在检查不过更简洁:
var missingValues = reject(fullArray, function (number) {
return store.includes(number);
});
关于javascript过滤器缺少数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45646661/