节点mongoose for in循环不起作用

node mongoose for in loop doesn't work

本文关键字:循环 不起作用 in for mongoose 节点      更新时间:2023-09-26

我有以下代码:

app.get('/api/getSubRooms/:id', function(req, res, next) {
var rooms = [];
Room.findById(req.params.id, function(err, room) {
    if (err) throw  err;
    var rootRoom = room;
    console.log("Subrooms: " + rootRoom.subrooms);
    for (var subroom in rootRoom.subrooms) {
        Room.findById(subroom, function(err, room) {
            if (err) throw  err;
            rooms.push(room);
            if (rooms.length === rootRoom.subrooms.length) res.send(rooms);
        });
    }
});
});

现在数组rootRoom。subrooms包含来自MongoDB的ObjectID,但是for-in循环给我0作为第一个成员,尽管这个成员显然不存在于数组中,如console.log所示。当我使用传统的for循环时:

for (var i=0; i<rootRoom.subrooms.length; ++i) {
        Room.findById(rootRoom.subrooms[i], function(err, room) {
            if (err) throw  err;
            rooms.push(room);
            if (rooms.length === rootRoom.subrooms.length) res.send(rooms);
        });

一切正常。有人知道为什么会这样吗?

From MDN docs:

数组索引只是具有整型名称和的可枚举属性在其他方面与一般对象属性相同。没有保证……In将返回任何特定的索引命令,它将返回所有可枚举的属性,包括那些具有非整数名称和继承的名称。

这个0成员可以来自原型链上的另一个可枚举属性