2016-02-13 79 views
0

我有一些JSON數據,我試圖通過使用一些嵌套for循環來處理。我得到的結果並不是我所期望的。這裏是我開始有:爲什麼我得到一個奇怪的結果嵌套for循環?

data = [ 
{ 
    "user_id": "54036a265b2fa765099af857", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5589fdbbe1231a40765a71fe", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
}, 
{ 
    "user_id": "5589fdbbe1231a40765a71fe", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
}, 
{ 
    "user_id": "5403cffdbd73cc4e0b49bda7", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
} 
] 

現在,這裏是我用來處理上面的JSON代碼:

for (var i = 0; i < data.length; i++) { 
    for (var j = 0; j < data[i].days.length; j++) { 
     for (var k = 0; k < data[i].days[j].items.length; k++) { 
      if (data[i].user_id === data[i].days[j].items[k].user_id) { 
       data[i].days[j].item_count++; 
      } 
     } 
    } 
} 
console.log('result = ' + JSON.stringify(data); 

什麼我期待的是,item_count將包含一個表示當前用戶的項目數的整數(由data[i].user_id給出)。相反,這裏是我得到的:

result = [ 
{ 
    "user_id": "54036a265b2fa765099af857", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 1 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5589fdbbe1231a40765a71fe", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 4 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
}, 
{ 
    "user_id": "5589fdbbe1231a40765a71fe", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 1 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 4 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
}, 
{ 
    "user_id": "5403cffdbd73cc4e0b49bda7", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 1 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 4 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
} 
] 

我在做什麼錯?

+2

另外,這不是JSON,它是一個對象數組。 JSON是用於序列化和數據傳輸的字符串格式。 (你的代碼使用JSON.stringify(data)記錄到控制檯的結果是JSON。) – nnnnnn

+0

我認爲這些數組中的一些元素是錯誤的:有兩個名爲「items」的「items」屬性:即,日期「:」2016-01-16T05:00:00.000Z「, 」items「:[], 」items「:0 – alexandergs

+1

您期待的結果是什麼?您可以將其分解爲一小段有相同問題的數據? –

回答

1

我跑你的代碼,結果是正確的。你可能有一個緩存問題或類似的東西:

<html> 
    <head> 


    <script> 
    var data = [ 
    { 
    "user_id": "54036a265b2fa765099af857", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5589fdbbe1231a40765a71fe", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
    }, 
    { 
    "user_id": "5589fdbbe1231a40765a71fe", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
    }, 
    { 
    "user_id": "5403cffdbd73cc4e0b49bda7", 
    "days": [ 
     { 
      "date": "2016-01-14T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-15T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "5608a7b0488505351891c91f" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-01-16T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-08T05:00:00.000Z", 
      "items": [ 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "54036a265b2fa765099af857", 
        "item_id": "56b26ff70ac237b50d061578" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b119409736e0086c37ed0a" 
       }, 
       { 
        "user_id": "5403cffdbd73cc4e0b49bda7", 
        "item_id": "56b26ff70ac237b50d061578" 
       } 
      ], 
      "item_count": 0 
     }, 
     { 
      "date": "2016-02-09T05:00:00.000Z", 
      "items": [], 
      "item_count": 0 
     } 
    ] 
    } 
    ]; 

    for (var i = 0; i < data.length; i++) { 
    for (var j = 0; j < data[i].days.length; j++) { 
     for (var k = 0; k < data[i].days[j].items.length; k++) { 
      if (data[i].user_id === data[i].days[j].items[k].user_id) { 
       data[i].days[j].item_count++; 
      } 
     } 
    } 
    } 

    console.log('result = ' + JSON.stringify(data)); 

    </script> 

    </head> 
    <body> 
    </body> 
    </html> 
+0

謝謝。我在我的示例代碼中修復了這個問題真實的代碼是正確的。 – ChrisPaterson

+0

請查看我更新的答案。我運行了你的代碼,輸出結果是正確的。請刪除您的緩存並確保您正在運行正確的html代碼。 – alexandergs

+0

這很奇怪,因爲我在瀏覽器和服務器上嘗試了相同的代碼(node.js),並得到了我在我的問題中發佈的相同(不正確)結果。 – ChrisPaterson