javascript在数组过滤器中嵌套for循环

javascript nesting a for loop inside an array filter

本文关键字:嵌套 for 循环 过滤器 数组 javascript      更新时间:2023-09-26

我正在解决一个编码练习,遇到了一个有趣的问题。我正在尝试通过参数筛选数组(我事先不知道会有多少个参数)。所以我函数的第一个参数总是一个数组,后面跟着一个随机数的整数,我需要过滤掉。

我想我可以通过在过滤函数中嵌套一个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);

感谢的帮助

请将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));

这比它需要的要复杂得多。这在更少的代码行中做同样的事情,我认为它更明确,更容易阅读

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);