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

时间:2015-12-02 13:42:56

标签: javascript

我解决了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;
&#13;
&#13;

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

请将return true移到函数末尾,因为for循环应该只停止,如果找不到想要的值。

&#13;
&#13;
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;
&#13;
&#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);