Javascript 为什么我的第一个数组项总是包含';函数';?

Javascript 为什么我的第一个数组项总是包含';函数';?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我是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(fu

我是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!
        }
    });
}
var-topicObjArray=[orm.Topic];
对于(变量i=0;i0){
topicObjArray.push(主题);
计数++;
}
否则{
计数++;
}
if(count==topicIdsArray.length){
//耶,我们有所有的话题!继续!
//但是哦,不,有什么不对劲!
}
});
}
在正常情况下,计数将递增,直到它等于原始数组计数,并且方法可以完成。在这种情况下,由于某种原因,在初始化topicObjArray时,在我插入任何对象之前,第一个索引被“Function”占用。因此,如果我查询六个对象,我将只返回其中的5个,因为第一个索引总是被占用的

我肯定我忽略了一些简单的东西,但是网络搜索并没有提供解决方案的线索。问题一定是在数组的初始化中,但我不明白它是什么。我尝试了不同的方法来实例化它,得到了相同的结果。下面是我的调试器的屏幕截图,它最好地描述了正在发生的事情(我使用的是WebStorm IDE):


如果你需要更多的信息,请告诉我。我感谢社区提供的任何见解。

您可以这样初始化阵列

var topicObjArray = [orm.Topic];
这使得数组的第一个元素
orm.Topic
,从代码的其余部分判断,它是一个函数

只需按如下方式初始化阵列:

var topicObjArray = [];

这样:
var-topicObjArray=[orm.Topic]
这是准确的代码吗,你的
for
循环没有一个大括号?是的,代码缺少初始化+变量命名与你的调试示例不同-问题不在你显示的代码中。@clav:是的,我无意中遗漏了这一点。已修复。我仍然找不到您的
topicsArray
变量,如何初始化它?是
topicsArray=topicsObjArray
?如果您使用
topicObjArray=[orm.Topic]
初始化数组,这不是错误,因为您的第一个元素实际上是您的ormThank中的实例方法。工作完美无瑕。这是每种类型数组的正确方法,还是仅仅是自定义对象?似乎我已经初始化了其他数组,如:var stringArray=[String]。JS中没有数组类型,所以您总是使用
[]
。您在它们之间放置的任何内容都将成为数组中的一个元素,例如,
[String]
字符串
对象放入其中,很可能它的行为与您希望的不一样。好的,这是有意义的。我成长中的大部分烦恼可能都是由于初始化不当造成的。我非常感谢你的帮助。