Javascript 最后一个数组字典对象是空节点JS
我遇到了一个有点奇怪的问题。我正在遍历一系列消息对象,其中包含各种信息,包括日期、主题数据和用户内容。对于每个索引,我获取三个项并创建一个字典,然后将其推送到一个新数组中。循环完成后,新数组将拥有除最后一个索引之外的所有正确信息。在最后一个索引中的三个字典值中,最后一项(日期对象)为空。我已经通过使用forEach循环解决了这个问题,如下所示: 原始非工作方法:Javascript 最后一个数组字典对象是空节点JS,javascript,node.js,webstorm,Javascript,Node.js,Webstorm,我遇到了一个有点奇怪的问题。我正在遍历一系列消息对象,其中包含各种信息,包括日期、主题数据和用户内容。对于每个索引,我获取三个项并创建一个字典,然后将其推送到一个新数组中。循环完成后,新数组将拥有除最后一个索引之外的所有正确信息。在最后一个索引中的三个字典值中,最后一项(日期对象)为空。我已经通过使用forEach循环解决了这个问题,如下所示: 原始非工作方法: var tempArray = []; for(var k = 0; k < msgArray.length; k++)
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]
-消息(对象)
-topicId(字符串)
-日期时间(日期)
……等等。我认为,如果原始数组存在问题,它将影响到两种解析到字典中的方法,但事实并非如此。这是一个如此奇怪的现象的部分原因 我想可能还有别的地方出了问题,因为这两段代码会做完全相同的事情。我想问题在于你的msgArray,让我们看看。@Pointy:我同意它们的行为应该完全相同,但它们不是。msgArray是最基本的。它没有明显的问题。唯一的一致性是每次最后一个索引上的null。在调试器输出中,tempArray[4][created]显示的是“object”而不是“date”…我认为msgArray存在问题?当您记录tempArray[4]的类型时会发生什么情况。created?