将对象推送到已存在的javascript对象

时间:2012-10-23 19:39:41

标签: javascript object push add

我使用nodejs和mongodb。

我从以下mongodb查询中获取字典res:

Profile.find(search,['_id', 'username'],function(err, res)

打印res看起来像:

[
    {
        "username": "dan",
        "_id": "508179a3753246cd0100000e"
    },
    {
        "username": "mike",
        "_id": "508317353d1b33aa0e000010"
    }
]
}

我想推送每个res [x]另一个键值对:

[
    {
        "username": "dan",
        "_id": "508179a3753246cd0100000e",
        "more info": {
            "weight": "80",
            "height": "175"
        }
    },
    {
        "username": "mike",
        "_id": "508317353d1b33aa0e000010"
    },
    "more info": {
        "weight": "80",
        "height": "175"
    }
]
}

我试过了:

var x=0 dic = [] while (x<res.length){     dic[x] = {}     dic[x]=res[x]         dic[x]["more info"] = {"wight" : weight, "height" : hight}         x=x+1 } 但它被忽略了,我得到了

[
    {
        "username": "dan",
        "_id": "508179a3753246cd0100000e"
    },
    {
        "username": "mike",
        "_id": "508317353d1b33aa0e000010"
    }
]
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

改为使用for循环。

for (var x = 0, len = res.length; x < len; ++x) { ... }

您需要首先初始化变量xvar x = 0),然后在每次执行循环后递增它(++xx += 1)。

<强>更新

哦,好的。为什么顺便创建新数组(dic)的事件? JavaScript中的对象通过引用传递,因此如果您只修改单个结果(res [0],res [1]),则会得到相同的结果。

dic[x] = {}; dic[x] = res[x]在创建新对象({})时没有意义,然后立即用对象res[x]覆盖它来覆盖它。

试试这个:

 res.forEach(function (item) {
   item['more info'] = { weight: weight, height: height };
 });

 console.log(res);