这是freecodecamps挑战之一,它通过过滤器内部的for循环传递数组newArg的第一个元素,但不适用于第二个元素,因此挑战未通过可以有人向我解释原因。请不要写任何完整的解决方案,因为我只是想要一点帮助继续前进。
function destroyer(arr) {
// Remove all the values
var newArg = [];
for (var i=1; i < arguments.length; i++){
newArg.push(arguments[i]);
}
var newArray = arr.filter(function(val){
for (i = 0; i < newArg.length; i++) {
return val !== newArg[i];
}
});
return newArray;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
答案 0 :(得分:3)
filter
来电:
var newArray = arr.filter(function(val){
for (i = 0; i < newArg.length; i++) {
return val !== newArg[i];
}
});
与:
相同var newArray = arr.filter(function(val) {
return val !== newArg[0];
});
因为你是从第一次迭代中返回的。
<强>解决方案:强>
你必须将return语句包装成if
,如下所示:
var newArray = arr.filter(function(val){
for (i = 0; i < newArg.length; i++) {
if(val === newArg[i]) { // don't return if val !== newArg[i]
return true; // return only when they're ===
}
}
return false; // default return (nothing is found in the array)
});
或使用像Array.prototype.some
这样的替代方案:
var newArray = arr.filter(function(val){
return newArg.some(function(arg) { // return true if some item pass the test (false otherwise)
return arg === val; // the test
})
});