【发布时间】:2016-11-02 15:06:35
【问题描述】:
我有一个对象(来自 MongoDB),看起来像这样:
var test = [
{
"_id": "1",
"childs": [
{
"name": "First child",
"child_id": 1
},
{
"name": "Second child",
"child_id": 2
}
]
},
{
"_id": "2",
"childs": [
{
"name": "First child",
"child_id": 1
}
]
}
];
我正在尝试遍历此内容并将每个孩子显示为单独的项目。我就是这样做的:
var response_items = [];
//Process relays as individual devices
test.forEach(function(device) {
var response_item = {};
response_item._id = device._id;
//Process relays as individual devices
device.childs.forEach(function(child) {
response_item.name = child.name;
response_item.child_id = child.child_id;
//Return devices
response_items.push(response_item);
});
});
console.log(response_items);
但由于某种原因,这是我得到的结果:
Array (3)
{_id: "1", name: "Second child", child_id: 2}
{_id: "1", name: "Second child", child_id: 2}
{_id: "2", name: "First child", child_id: 1}
第三项是正确的,但是第一项和第二项是重复的,我不知道我做错了什么。
【问题讨论】:
-
当然,您正在对内部
forEach()中的同一个对象进行变异,因此下一次迭代会覆盖您之前设置的属性。然后,您将同一个对象推入数组。相反,在内部.forEach()中声明您的var response_item = {}。 JS 从不隐式复制对象。 -
尝试将前两行代码 (var response_item={} ...) 放入
device.childs.forEach()或查看这个小提琴(分叉)jsfiddle.net/5kyk7pbx -
我觉得自己很蠢...谢谢
标签: javascript arrays loops object foreach