javascript - 为什么我的 for 循环似乎只运行一次?

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

最佳答案

过滤器调用:

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

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

解决方案:

您必须将返回语句包装在 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
  })
});

关于javascript - 为什么我的 for 循环似乎只运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42873740/

相关文章:

javascript - 当未完成所有字段时,如何创建确认表单提交的 JS 函数

javascript - Google 标签管理器查找并替换变量中的字符

javascript - 将对象分配给 "this"

javascript - 如果结果已知,js 是否会跳过语句?

javascript - 使用 Gradle 在 IntelliJ 中使用多个源集的 2 个项目 Unresolved 依赖关系

javascript - 使 div 像表格一样排序

javascript - 使用 highcharts.js 标签进行绘图时,标签偏离中心而不是居中

javascript - 在网站 HTML 页面上搜索文本

javascript - Grunt usemin 转换 Assets 路径

php - 将参数传递给 jquery javascript 函数?