[英]Unable to loop through properly in nested object/array in javascript
我有一個對象(來自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}
第三項是正確的,但第一項和第二項是重復的,我不知道我做錯了什么。
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) { //Process relays as individual devices device.childs.forEach(function(child) { var response_item = {}; response_item._id = device._id; response_item.name = child.name; response_item.child_id = child.child_id; //Return devices response_items.push(response_item); }); }); console.log(response_items);
使用Array.reduce()
以純函數方法展平數組,如下所示:
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 result = test.reduce(function (accumulator, current) { var mappedRes = current.childs.map(function (item) { item._id = current._id; return item; }); return accumulator.concat(mappedRes); }, []); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.