内部循环未填充数组

时间:2018-10-05 22:07:34

标签: javascript node.js for-loop

任何人都可以解释我在该代码中缺少什么吗?

for循环不是异步进程吗?

为什么数组保持为空?

TYPE1

4 个答案:

答案 0 :(得分:3)

exhaustive.length等于0。如果j = 00 < 0为假,则最内层循环中的代码将永远不会运行(for循环的条件部分必须为true才能运行最内层代码)。 i只会循环,j的内部循环将被跳过,然后它什么都不做就会退出。您可以在循环内使用console.log语句来帮助弄清这一点。

答案 1 :(得分:0)

由于Nicholas explained的原因而无法工作。看来您只是想将render中的唯一值过滤到exhaustive中。试试这个..

exhaustive = [...new Set(render)]

答案 2 :(得分:0)

正如其他人所说,内部循环永远不会运行,因为exhaustive为空。但是,即使它运行了,您的代码也无法正常工作,因为您会为exhaustive.push()中与exhaustive不同的每个元素调用render[i]推一次。

如果循环未找到匹配项,则需要在循环后执行

var render = ["Element1", "Element2", "Element1", "Element1", "Element1"]

var exhaustive = []

for (var i = 0; i < render.length; i++) {
  var found = false;
  for (var j = 0; j < exhaustive.length; j++) {
    if (exhaustive[j] === render[i]) {
      found = true;
      break;
    }
  }
  if (!found) {
    exhaustive.push(render[i]);
  }
}

console.log(exhaustive) // Expected result ["Element1","Element2"]

您还可以使用内置方法indexOf()测试该值是否已在数组中。

var render = ["Element1", "Element2", "Element1", "Element1", "Element1"]

var exhaustive = []

for (var i = 0; i < render.length; i++) {
  if (exhaustive.indexOf(render[i]) == -1) {
    exhaustive.push(render[i]);
  }
}

console.log(exhaustive) // Expected result ["Element1","Element2"]

另一件事:使用if (x !== y)测试两个事物是否相等,而不是if (!x === y)

答案 3 :(得分:0)

大家好,谢谢您所做的所有反应和反应。

但是我还是不明白。

事实是,循环缺少宽度,就像Nicholas解释的那样,它可以迭代。

for (var j = 0; j < exhaustive.length; j++) {
    if (exhaustive[j] === render[i]) {
      found = true;
      break;
    }
  }

除了资源保存之外,中断不是真的没有必要吗?

在此循环中严格逻辑的上下文中

for(var j = 0;j<exhaustive.length;j++){

  if(!exhaustive[j]===render[i]){

      exhaustive.push(render[i])
  }

}

对于穷举的每个元素,当且仅当穷举不包含render [i]推送render [i]

我不明白为什么此代码多次添加?