Javascript数组仅包含最新的对象

时间:2016-04-28 01:46:32

标签: javascript arrays node.js mongodb

我有以下代码

followDB.find({user: username}, function(err, docs){
    if(err){console.log(err)}else {
      for (var i = 0; i < docs.length; i++) {
        postsDB.find({ user: docs[i].follow }, function (err, docs) {
            if(err){console.log(err)}
            else{
                for (var i = 0; i < docs.length; i++) {
                  var array = []
                var post = {
                  user: docs[i].user,
                  text: docs[i].text,
                  time: docs[i].time,
                  likes: docs[i].like,
                  id: docs[i]._id
                }
                array.push(post)
                console.log(array.length);
                  //socket.emit('Order Posts', user, text, time, likes, id)
                }
            }
        });
      }
    }
  })

由于某种原因,array.length总是等于1,我不知道为什么。数组中的对象始终是最后提交的对象。

感谢您的支持。

2 个答案:

答案 0 :(得分:4)

您正在每次迭代时重新创建数组。

在for循环之外,在它之前,而不是在它内部初始化它。

答案 1 :(得分:0)

只需在for循环外更改数组

followDB.find({user: username}, function(err, docs){
        if(err){console.log(err)}else {
          for (var i = 0; i < docs.length; i++) {
            postsDB.find({ user: docs[i].follow }, function (err, docs) {
                if(err){console.log(err)}
                else{
                    //simply change the array outside the for loop
                    var array = []
                    for (var i = 0; i < docs.length; i++) {

                    var post = {
                      user: docs[i].user,
                      text: docs[i].text,
                      time: docs[i].time,
                      likes: docs[i].like,
                      id: docs[i]._id
                    }
                    array.push(post)
                    console.log(array.length);
                      //socket.emit('Order Posts', user, text, time, likes, id)
                    }
                }
            });
          }
        }
      })