javascript - 中断并继续
问题描述
我想知道是否有人可以为我澄清一些事情。我有一些代码可以根据不同的值检查数组的重叠值。基本上它的行和comumns 中的谷歌表的内容就是GAS。我现在拥有的是
var e = [[2,4,3,4,2],[1,5,3,6,2],[2,4,3,4,1],[1,4,3,6,1],[2,4,3,6,5]];
var i; //id of entry to check
var j; //id of element to check
var k; //id of entry to compare
for (i in e){ //2D ARRAY ARRAY
for (k in e){ //ELEMENT TO COMPARE
if (e[i][2] === e[k][2] && e[i][3] === e[k][3] && e[i][0] && e[i][0] >= e[k][0] && e[i][1] <= e[k][1] && e[i][4] <= e[k][4] && i !=k){
e.splice(i,1);
continue;
}
}
}
return e;
如果最后一个检查的数组也被标记为代码失败,我必须添加continue;
否则。splice
但我认为break
也可以代替 continue 但由于某种原因它不会。我以为break
会回到外部循环,但它会永久保留break
那段代码吗?
感谢人们
编辑:说得太早了。即使继续,代码仍然失败。挠头继续
解决方案
continue
直接跳到下一次迭代,所以:
while(true) {
console.log("a");
continue;
console.log("b");
}
只会记录a
,因为它会在到达 continue 时跳回循环的开头。但是,如果您移动continue
到循环的最后一行(就像在您的代码中一样)它什么也不做,因为它会跳到循环的开头一行之后,所以它只是跳过一个空行。
我以为 break 会回到外部循环
是的,这就是发生的事情,这实际上是一件好事,就像您已经删除了该元素一样,检查其他欺骗是没有意义的,因为您不想将其删除两次。
现在真正的问题是splice
改变了索引,所以如果你拼接出第四个元素,第五个元素变成第四个元素,但是循环继续到第五个元素而不再次检查第四个元素(现在是一个不同的元素)。因此,您必须在中断之前返回一个元素:
for(let i = 0; i < e.length; i++) {
for(let k = 0; k < e.length; k++) {
if(i === k) continue; // < good usecase
if(/* equality checks */) {
e.splice(i, 1); // remove the element
i--; // go back by one as we changed the order
break; // exit the inner loop
}
}
}
海事组织:
for(const [i, value] of arr.entries()
1 )我赞成for..in
2)您很快就会忘记什么arr[i][2]
,为索引提供正确的名称使其更具可读性:
const [idA, someValueA] = e[i];
const [idB, someValueB] = e[k];
if(idA === idB && someValueA <= someValueB // ...
3)e
是一个坏名字。
推荐阅读
- javascript - 退出过程后机器人未重新启动
- sharepoint-online - 如何为单页 Web 部件添加菜单项?
- go - Go - 遍历嵌套结构
- reactjs - 为什么在顶层调用 React Hooks?
- python - Beam - 在 Beam 管道的开始和结束处仅运行一次的函数
- architecture - 领域驱动设计:层次结构、存储库和访问
- xml - 从 XMLTABLE 中提取数据的 Oracle 函数
- python - 使用 opencv 检测作物线
- python - 无法访问抓取蒸汽的元素
- javascript - 每个导入的函数都显示为“未定义”,尽管很明显是在进行导入