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

时间:2013-05-06 14:56:31

标签: 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(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'占用。因此,如果我要查询六个对象,我将只返回其中的五个,因为第一个索引总是被占用。

我确信我必须在这里忽略一些简单的东西,但网络搜索没有提示解决方案。问题必须在数组的初始化中,但我不明白它是什么。我已经尝试了不同的方法来实例化它具有相同的结果。这是我的调试器的屏幕截图,它最能描述正在发生的事情(我使用的是WebStorm IDE):

Weirdness

如果您需要更多信息,请与我们联系。我感谢社区提供的任何见解。

1 个答案:

答案 0 :(得分:3)

您可以像这样初始化数组

var topicObjArray = [orm.Topic];

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

只需简单地初始化您的数组:

var topicObjArray = [];