任何人都可以解释我在该代码中缺少什么吗?
for循环不是异步进程吗?
为什么数组保持为空?
TYPE1
答案 0 :(得分:3)
exhaustive.length
等于0
。如果j = 0
和0 < 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]
我不明白为什么此代码多次添加?