2016-02-13 39 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