这是 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);
最佳答案
过滤器
调用:
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];
});
因为您是从第一次迭代返回的。
解决方案:
您必须将返回语句包装在 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
})
});
关于javascript - 为什么我的 for 循环似乎只运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42873740/