簡體   English   中英

無法在javascript中嵌套對象/數組中正確循環

[英]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}

第三項是正確的,但第一項和第二項是重復的,我不知道我做錯了什么。

示例: https//jsfiddle.net/om89y661/

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM