Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 最后一个数组字典对象是空节点JS_Javascript_Node.js_Webstorm - Fatal编程技术网

Javascript 最后一个数组字典对象是空节点JS

Javascript 最后一个数组字典对象是空节点JS,javascript,node.js,webstorm,Javascript,Node.js,Webstorm,我遇到了一个有点奇怪的问题。我正在遍历一系列消息对象,其中包含各种信息,包括日期、主题数据和用户内容。对于每个索引,我获取三个项并创建一个字典,然后将其推送到一个新数组中。循环完成后,新数组将拥有除最后一个索引之外的所有正确信息。在最后一个索引中的三个字典值中,最后一项(日期对象)为空。我已经通过使用forEach循环解决了这个问题,如下所示: 原始非工作方法: var tempArray = []; for(var k = 0; k < msgArray.length; k++)

我遇到了一个有点奇怪的问题。我正在遍历一系列消息对象,其中包含各种信息,包括日期、主题数据和用户内容。对于每个索引,我获取三个项并创建一个字典,然后将其推送到一个新数组中。循环完成后,新数组将拥有除最后一个索引之外的所有正确信息。在最后一个索引中的三个字典值中,最后一项(日期对象)为空。我已经通过使用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] -消息(对象) -topicId(字符串) -日期时间(日期)


……等等。我认为,如果原始数组存在问题,它将影响到两种解析到字典中的方法,但事实并非如此。这是一个如此奇怪的现象的部分原因

我想可能还有别的地方出了问题,因为这两段代码会做完全相同的事情。我想问题在于你的msgArray,让我们看看。@Pointy:我同意它们的行为应该完全相同,但它们不是。msgArray是最基本的。它没有明显的问题。唯一的一致性是每次最后一个索引上的null。在调试器输出中,tempArray[4][created]显示的是“object”而不是“date”…我认为msgArray存在问题?当您记录tempArray[4]的类型时会发生什么情况。created?