2017-08-14 97 views
2

我對編程相對比較陌生,並且遇到了一些與我正在開發的項目有關的問題。Javascript嵌套循環推向陣列

msg.newCG2 = []; 
for(i=0;i<msg.newCG.length;i++){ 
    for(j=0;j<msg.campaignGroup.length;i++){ 
     if(msg.campaignGroup[j].col10 === msg.newCG[j]){ 
      msg.groupTotals = msg.groupTotals + msg.campaignGroup[j].col11; 
    } 
    msg.newCG2.push(msg.newCG[i], msg.groupTotals) 
    } 
} 

基本上,在msg.newCG的「標識」(整數)中的每一個,我想看看在msg.campaignGroup每個ID和總結的所有目錄總計使用相同的ID,從msg.campaignGroup.col11 - 然後將ID和總數推送到一個新的數組 - msg.newCG2。

當我運行代碼時,第一個項目通過進程發送,但由於內存磨碎到停止。我認爲這是因爲我的代碼中有錯誤。

這段代碼出錯了?我確信有更好的方法可以做到這一點,但我很好奇我錯在哪裏。

+0

看起來你正在向數組推送每條消息,無論條件是否爲真。條件只是設置一個變量。此外,這種推動是在兩個循環內。 – Draco18s

+0

非常感謝!你是否有時間糾正這段代碼,以便我可以看到我的邏輯出錯了? – Overclocker

+0

原始陣列有多大? – hardillb

回答

0

在第二個for循環中存在一個輸入錯誤,並且推送需要在外部循環內發生。

msg.newCG2 = []; 
for(i=0;i<msg.newCG.length;i++){ 
    for(j=0;j<msg.campaignGroup.length;j++){ 
     if(msg.campaignGroup[j].col10 === msg.newCG[i]){ 
      msg.groupTotals = msg.groupTotals + msg.campaignGroup[j].col11; 
     } 
    } 
    msg.newCG2.push(msg.newCG[i], msg.groupTotals) 

} 
+0

謝謝!修正了錯字,但它仍然遇到了內存問題! – Overclocker

0

如何:

msg.newCG2 = []; 

for (i=0; i < msg.newCG.length; i++) { 

    var groupTotal = 0; 

    for (j=0; j < msg.campaignGroup.length; j++) { 
     if (msg.campaignGroup[j].col10 === msg.newCG[i]){ 
      groupTotal = groupTotal + msg.campaignGroup[j].col11 
     } 
    } 

    msg.newCG2.push(groupTotal) 
} 
0

而不是循環1.2M倍,這將是更有效地使用單傳過來的4000個運動團體,通過ID分組創建總計數組所有的標識 - 我喜歡用reduce()功能如下:

var cgMap = msg.campaignGroups.reduce(function(arr, grp) { 
     var grpid = grp.col10; 
     var count = grp.col11; 
     var total = arr[grpid] || 0; 
     arr[grpid] = total + count; 
    }, 
[]); 

我知道,降低(...)函數是不是最容易神交,但它需要第二ARG(空數組)並通過它與每個廣告系列組對象一起依次轉換爲內聯函數。結果應該是一組簡單的組合總數(來自col11),由組編號索引(來自col10)。現在

,它只是一個返回在msg.newCG發現這些300個IDS的總數的事情 - 這map()功能確實爲我們:

var cgOut = msg.newCG.map(function(gid) { 
     return cgMap[gid]; // lookup the total by group id 
    } 
); 

我在這裏做了一些假設,如組ID不是非常大的整數,並且間隔很近(不太稀疏)。從原始代碼中,我無法確定您想要返回的數據的格式爲msg.newCG2。最後的push()函數會將2個整數附加到數組上 - 輸出組ID和該組的總數。具有在平面陣列中交織的組id和總數對不是非常有用的數據結構。也許你打算把總價值放入一個由組ID索引的數組中?如果是這樣,你可以重寫這條線如下: msg.newCG2[msg.newCG[i]] = msg.groupTotals;