为什么我的第一个数组项总是包含“函数”?

我是新来的JavaScript和一直在修改节点js / mongo web服务。 我正在循环一个数组,并在每个索引执行一个ID查询,所以我可以得到完整的对象,如下所示:

var topicObjArray = [orm.Topic]; for(var i = 0; i < topicIdsArray.length; i++) { orm.Topic .find({ appId: appId, _id: topic[i].id}) .exec(function(error, topic) { if(error) { console.log('oops ' + error); } else if(topic && topic.length > 0) { topicObjArray.push(topic); count++; } else { count++; } if(count == topicIdsArray.length) { // yay we've got all our topics! Carry on! // But oh no something is amiss! } }); } 

在正常情况下,计数将增加,直到它等于原始数组数,并且方法可以完成。 在这种情况下,由于某种原因,在topicObjArray初始化时,在插入任何对象之前,第一个索引被“Function”占据。 所以,如果我要查询六个对象,那么我只能找回其中的五个,因为第一个索引总是被占用的。

我相信我必须在这里忽略一些简单的东西,但是networkingsearch没有提供任何解决scheme的提示。 问题必须在数组的初始化,但我不明白它是什么。 我试过用相同的结果实例化不同的方法。 这里是我的debugging器的屏幕截图,它最能描述正在发生的事情(我正在使用WebStorm IDE):

怪事

让我知道如果你需要更多的信息。 我很欣赏社区可以提供的任何见解。

你像这样初始化数组

 var topicObjArray = [orm.Topic]; 

这使得数组orm.Topic的第一个元素,从你的代码的其余部分判断是一个函数。

简单地初始化你的数组,像这样:

 var topicObjArray = [];