2014-09-30 1 views
0

이 코드에 문제가있어 알아낼 수 없습니다. "데이터"에서 "티켓"보다는 "데이터"에 추가하는 것처럼 보입니다. 데이터에 대한 구글 스크립트 코드를 사용JavaScript 잘못된 결과 표시로 중첩 됨

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, 1, 3, 1, 3], [1, 1, 1, 2, 1, 2], [1, 2, 1, 4, 1, 4], [1,2,1,4,1,4], [1,1,1,2,1,2], [1, 2, 1, 4, 1, 4], [1,1,1,1,1,1], [1,2,1,4,1,4], [1,2,1,2,1,2]] 데이터는 변경

+0

'i' 루프 밖에 있다면'ticket [i] = data [x];의 목적은 무엇입니까? – Cheery

+1

데이터는'ticket [0] = data [0];을 수행함으로써 변경 될 것입니다. 본질적으로 객체 참조를 지정하고 있습니다. – bhantol

+0

괜찮 았어. 루프를 시작하기 위해 데이터의 첫 번째 행을 티켓으로 설정하려고했습니다. 고맙습니다! – Cale

답변

1
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(); 
+0

그래서 우리가 성취하려는 것이 아닙니다. 우리는 '데이터'행을 검색하고 있습니다. 우리가 "columns"0,1,2, and 4 에서처럼 데이터를 찾으면 'data'의 'columns'3과 5를 'ticket'의 같은 열에 추가합니다. 루프가 0,1,2 및 4의 "열"처럼 찾을 수없는 경우 '데이터'에서 해당 행과 유사한 '티켓'에 새 행이 추가됩니다. 따라서 우리는 더 적은 수의 행과 "columns"0,1,2와 4가 같은 행을 "columns"3과 5에 합계가 더해질 것입니다. – Cale

0

이것은 내가 가지고있는 곳이며 작동합니다. 더 나은 방법이 있다면 알려주세요

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