我解决了coding exercise并遇到了一个有趣的问题。我试图通过参数过滤数组(我事先不知道会有多少参数)。所以我的函数的第一个参数总是一个数组,后跟我需要过滤的随机数整数。
我想通过在我的过滤器函数中嵌入for循环来解决这个问题,但到目前为止它只是按第一个参数过滤而忽略了第二个参数。这是由于使用return false/true
吗?如果是这样,我可以使用什么呢?
function destroyer(arr) {
var output = [];
for (var y = 1; y < arguments.length; y++) {
output.push(arguments[y]);
}
function destroy(value) {
for (var x = 0; x < output.length; x++) {
if (value === output[x]) {
return false;
} else {
return true;
}
}
}
return arr.filter(destroy);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
&#13;
感谢您的帮助
答案 0 :(得分:2)
请将return true
移到函数末尾,因为for循环应该只停止,如果找不到想要的值。
function destroyer(arr) {
var output = [];
for (var y = 1; y < arguments.length; y++) {
output.push(arguments[y]);
}
function destroy(value) {
for (var x = 0; x < output.length; x++) {
if (value === output[x]) {
return false;
}
}
return true;
}
return arr.filter(destroy);
}
document.write(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
&#13;
答案 1 :(得分:2)
这比它需要的更复杂。这在较少的代码行中做同样的事情,我认为它更明确,更容易阅读
function destroyer(arr) {
// get all the arguments after the initial array
var output = Array.prototype.slice.call(arguments, 1);
// filter the output
return arr.filter(function destroy(value) {
// only return the numbers that aren't in the output array
return output.indexOf( value ) < 0;
});
// profit.
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);