为什么我的for循环只出现一次?

时间:2017-03-18 11:25:21

标签: javascript

这是freecodecamps挑战之一,它通过过滤器内部的for循环传递数组newArg的第一个元素,但不适用于第二个元素,因此挑战未通过可以有人向我解释原因。请不要写任何完整的解决方案,因为我只是想要一点帮助继续前进。

function destroyer(arr) {
  // Remove all the values
  var newArg = [];
  for (var i=1; i < arguments.length; i++){
         newArg.push(arguments[i]);
       }


 var newArray = arr.filter(function(val){
  for (i = 0; i < newArg.length; i++) {
     return val !== newArg[i];
  } 


 });
 return newArray;



}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);

1 个答案:

答案 0 :(得分:3)

filter来电:

var newArray = arr.filter(function(val){
  for (i = 0; i < newArg.length; i++) {
     return val !== newArg[i];
  } 
});

与:

相同
var newArray = arr.filter(function(val) {
  return val !== newArg[0];
});

因为你是从第一次迭代中返回的。

<强>解决方案:

你必须将return语句包装成if,如下所示:

var newArray = arr.filter(function(val){
  for (i = 0; i < newArg.length; i++) {
     if(val === newArg[i]) { // don't return if val !== newArg[i]
       return true;          // return only when they're ===
     }
  }
  return false;              // default return (nothing is found in the array)
});

或使用像Array.prototype.some这样的替代方案:

var newArray = arr.filter(function(val){
  return newArg.some(function(arg) { // return true if some item pass the test (false otherwise)
     return arg === val;             // the test
  })
});
相关问题