Javascript 断断续续

Javascript 断断续续,javascript,Javascript,我想知道是否有人能为我澄清一些事情。我有一些代码可以根据不同的值检查数组中的重叠值。基本上,它是一个谷歌表格的内容的行和comumns为这是明确的气体。我现在拥有的是 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 c

我想知道是否有人能为我澄清一些事情。我有一些代码可以根据不同的值检查数组中的重叠值。基本上,它是一个谷歌表格的内容的行和comumns为这是明确的气体。我现在拥有的是

  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;
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
var j//要检查的元素的id
var-k//要比较的条目id
对于(e中的i){//2D数组
对于(k in e){//要比较的元素

如果(e[i][2]==e[k][2]&&e[i][3]==e[k][3]&&e[i][0]&&e[i][0]>=e[k][0]&&e[i][1]
继续
直接跳到下一个迭代,那么:

  while(true) {
    console.log("a");
    continue;
    console.log("b");
 }
将只记录
a
,因为如果它到达continue,它将跳回循环的开头。但是,如果将
continue
移动到循环的最后一行(就像在代码中一样),它不会做任何事情,因为它会在一行之后跳回循环的开头,因此它只跳过一个空行

我以为break会回到外环

是的,这就是发生的事情,这实际上是一件好事,因为如果您已经删除了元素,那么检查其他重复项是没有意义的,因为您不想删除它两次

现在真正的问题是
splice
更改了索引,因此,如果您拼接出第四个元素,则fith元素将成为第四个元素,但循环将继续到fith元素,而不再次检查第四个元素(现在是另一个元素)。因此,在中断之前,您必须返回一个元素:

 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
     }
   }
 }

3)
e
是个坏名字。

您可以使用带标签的中断来中断嵌套循环。 乙二醇

var num=0;
最外层:
对于(变量i=0;i<10;i++){
对于(var j=0;j<10;j++){
如果(i==5&&j==5){
打破最外层;
}
num++;
}
}

实际上,
continue
是一个no-op.Ah。这很好。我想我通过在拼接后增加k来解决了这个问题。这看起来可行吗?从我的测试来看很好?使用长had循环声明还有什么好处吗?我使用了
for(I in e){
etc只是因为它看起来更整洁,但如果这是一个不好的练习,它就会改变。@chris 1)增加k毫无意义,youtlr测试是不好的2)你不能在a
中为(i在arr中)减少
i
loop.yes。它们确实很糟糕!我想我需要重写一下。谢谢jonas@chris不用担心:)很高兴能帮上忙我加入了你的代码来代替我的
k++
,但奇怪的是它仍然缺少数组。对于像我这样的新手来说,这有点让人头疼
  const [idA, someValueA] = e[i];
  const [idB, someValueB] = e[k];
  if(idA === idB && someValueA <= someValueB // ...
var num = 0;
outermost:
for(var i = 0; i < 10; i++){
  for(var j = 0; j < 10 ; j++){
    if(i == 5 && j == 5){
      break outermost;
    }
    num++;
  }
}