简体   繁体   中英

Why am I getting a strange result with nested for loops?

I have some JSON data that I'm attempting to process by using some nested for loops. The result I'm getting is not what I would expect. Here is what I'm starting with:

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
        }
    ]
}
]

Now, here is the code I'm using to process the above 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);

What I'm expecting is that item_count will contain an integer representing the number of items for the current user (given by data[i].user_id ). Instead, here is what I'm getting:

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
        }
    ]
}
]

What am I doing wrong?

I ran your code and the results is right. You might have a cache problem or something like that:

  <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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM