用于显示错误结果的JavaScript嵌套

JavaScript Nested for showing wrong results

本文关键字:JavaScript 嵌套 结果 显示 错误 用于      更新时间:2023-09-26

我对这段代码有问题,无法理解。它似乎是添加到"数据"中,而不是像应该的那样从"数据"添加到"票证"中。在谷歌脚本中使用代码

function consolidate(){
  var data = [[1,1,1,1,1,1],[1,1,1,1,1,1],[1,2,1,2,1,2],[1,2,1,2,1,2],[1,1,1,1,1,1],[1,2,1,2,1,2],[1,1,1,1,1,1],[1,2,1,2,1,2],[1,2,1,2,1,2]];
  var ticket = [];
  ticket[0] = data[0];
  for(var x=0;x<data.length;x++){
    for(var i=0;i<ticket.length;i++){
      if(ticket[i][0]==data[x][0]&&ticket[i][1]==data[x][1]&&ticket[i][2]==data[x][2]&&ticket[i][4]==data[x][4]){
        ticket[i][3]=ticket[i][3]+data[x][3];
        ticket[i][5]=ticket[i][5]+data[x][5];
        break;
      } 
    }
    ticket[i]=data[x];
  }
}

我的数据结果是[[1,1,3,1,3],[1,1,2,1,2],[1,2,4,1,4],[1,2,1,4,1,4],[1,1,2,1,4,1,4]但是数据不应该改变

function consolidate(){
  var data = [[1,1,1,1,1,1],[1,1,1,1,1,1],[1,2,1,2,1,2],
              [1,2,1,2,1,2],[1,1,1,1,1,1],[1,2,1,2,1,2],
              [1,1,1,1,1,1],[1,2,1,2,1,2],[1,2,1,2,1,2]];
  var ticket = [];
  ticket[0] = data[0].slice();
  for(var x = 0; x < data.length; x++) {
    for(var i = 0; i < ticket.length; i++) {
        for(var k = 0; k < 5; k++) {
         if (ticket[i][k] != data[x][k])
             break;
         else if (k != 4)
             continue;
         ticket[i][3] += data[x][3];
         ticket[i][5] += data[x][5];
      } 
    }
    ticket[i] = data[x].slice();
  }  
  console.log(data);
}
consolidate();

这就是我的用武之地。如果有办法让它变得更好,请让我知道

function consolidate1(){// put data in here <-----()
  var data = [[1,1,1,1,1,1],[2,1,1,1,1,1],[1,1,1,1,1,1],[2,1,1,1,1,1],[1,1,1,1,1,1],[3,1,1,1,1,1],[1,1,1,1,1,1],[3,1,1,1,1,1],[1,1,1,1,1,1]];
  var ticket = [];
  ticket[0]=[];
  ticket[0][0]=data[0][0];
  ticket[0][1]=data[0][1];
  ticket[0][2]=data[0][2];
  ticket[0][3]=data[0][3];
  ticket[0][4]=data[0][4];
  ticket[0][5]=data[0][5];
  for(var x=1;x<data.length;x++){ //get all the unique rows based on columns 0,1,2,4 
  var indicator = 0;
    for(var i=0;i<ticket.length;i++){
      if(ticket[i][0]==data[x][0] && ticket[i][1]==data[x][1] && ticket[i][2]==data[x][2] && ticket[i][4]==data[x][4]){
        ticket[i][3]=ticket[i][3]+data[x][3];
        ticket[i][5]=ticket[i][5]+data[x][5];
        indicator = 1;
        break;
      }
    }
    if(indicator==0){
      ticket[i]=[];
      ticket[i][0]=data[x][0];
      ticket[i][1]=data[x][1];
      ticket[i][2]=data[x][2];
      ticket[i][3]=data[x][3];
      ticket[i][4]=data[x][4];
      ticket[i][5]=data[x][5];
    }
  }
  Logger.log(ticket);
}