簡體   English   中英

如何遍歷這些參數以篩選數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM