[英]How do I iterate through these arguments to filter an array?
所以我有這段代碼,它可以完成所需的工作,即返回一個輸入數組減去與該數組后面的參數匹配的所有值。 但是,我在弄清楚如何遍歷所有參數時遇到了麻煩。 這是我的工作-
function destroyer(arr) {
var arg2 = arguments[1];
var arg3 = arguments[2];
var arg4 = arguments[3];
var result = arr.filter(function(arg) {
if (arg != arg2 && arg != arg3 && arg != arg4) {
return (arg);
}
});
return result;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
這是我嘗試使用for循環遍歷所有參數的嘗試。 它不起作用,我正在努力概念化我在此處通過arr.filter中的回調確切地注入的內容-
function destroyer(arr) {
var result = arr.filter(function(arg) {
for (var i = 1; i < arguments.length; i++) {
if (arg != arguments[i]) {
return (arg);
}
}
});
return result;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
這離我需要去的地方很近嗎?
在每個函數調用(包括對.filter()
回調的調用.filter()
上都設置arguments
變量。 因此,該回調中的arguments
不是您所想的。
您可以使用.indexOf
來完成您想做的.indexOf
,並且需要將它們的參數復制到另一個數組中:
function destroyer(arr) {
var badValues = [];
for (var i = 1; i < arguments.length; ++i)
badValues = arguments[i];
return arr.filter(function(value) {
return badValues.indexOf(value) < 0;
});
}
使用.slice()
復制全部或部分arguments
對象很流行:
var badValues = [].slice.call(arguments, 1);
如果您希望簡潔,可以執行此操作,但是將arguments
對象傳遞給函數會使優化變得非常困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.