我遇到了一个奇怪的问题。我正在遍历包含各种信息(包括日期、主题数据和用户内容)的消息对象数组。对于每个索引,我抓取三个项目并创建一个字典,然后将其推入一个新数组。循环完成后,新数组包含所有正确信息,最后一个索引除外。在最后一个索引中的三个字典值中,最后一项(日期对象)为空。我已经通过循环使用 forEach 作为替代方案来解决这个问题,如下所示:
原始非工作方式:
var tempArray = [];
for(var k = 0; k < msgArray.length; k++) {
var newDict = {msg:msgArray[k], topId:msgArray[k].topicId, created:msgArray[k].dateTime};
tempArray.push(newDict);
}
替代工作方法:
var tempArray = [];
msgArray.forEach(function(messa){
var newDict = {msg:messa, topId:messa.topicId, created:messa.dateTime};
tempArray.push(newDict);
});
以及来自调试器的捕获:
来自调试器的替代方法捕获:
解决方法工作正常,但如果有人能解释为什么会发生这种情况会很好,只是为了我自己的学习/好奇。我感谢任何评论。谢谢。
编辑:虽然 msgArray 看起来有些可疑,但它是一个磨机数组的运行,每个索引中都有有效的内容......结构如下:
msgArray[0] - message (Object) - topicId (String) - dateTime (Date)
...等等。我认为如果原始数组存在问题,它会影响两种解析成字典的方法,但不会。这是如此奇怪的事件的部分原因。