簡體   English   中英

如何從源 json 對象生成對象的嵌套數組

[英]How to generate a nested array of objects from an source json object

使用對象數組中的值,我試圖生成另一個對象數組,其結構與原始數組的結構不同。

在以下示例數組中,您可以從key:value對中看到, key:value在 Source 數組和 Result 數組之間發生變化,但值相同。 我嘗試了一些代碼但不值得分享。 這種情況下可以用什么邏輯或者方法來生成下面提到的對象結構

源數組

[
  {
    "node": {
      "Charecter": "Hulk",
      "Publisher": "Marvel",
      "Movie": "Avengers"
    }
  },
  {
    "node": {
      "Charecter": "Wolverine",
      "Publisher": "Marvel",
      "Movie": "X-Men"
    }
  },
  {
    "node": {
      "Charecter": "Superman",
      "Publisher": "DC",
      "Movie": "Man of steel"
    }
  }
]

結果數組

[
  {
    "Franchise": "Marvel",
    "Data": [
      {
        "Lead": "Hulk",
        "In": "Avengers"
      },
      {
        "Lead": "Wolverine",
        "In": "X-Men"
      }
    ]
  },
  {
    "Franchise": "DC",
    "Data": [
      {
        "Lead": "Superman",
        "In": "Man of steer"
      }
    ]
  },
]

使用.find() .reduce().find()組合可以實現目標。

請嘗試以下操作:

 const data = [{ "node": { "Charecter": "Hulk", "Publisher": "Marvel", "Movie": "Avengers" } }, { "node": { "Charecter": "Wolverine","Publisher": "Marvel","Movie": "X-Men" } }, {"node": { "Charecter": "Superman", "Publisher": "DC","Movie": "Man of steel" } }]; const result = data.reduce((a, c) => { const found = a.find(e => e.Franchise === c.node.Publisher); if (found) found.Data.push({ Lead: c.node.Charecter, In: c.node.Movie }); else a.push({ Franchise: c.node.Publisher, Data: [{ Lead: c.node.Charecter, In: c.node.Movie }] }); return a; }, []); console.log(result)

我希望這有幫助!

您可以使用Array#reduce方法來完成,其中將對象內的所有內容分組並使用Object.values方法提取對象值。

 const data = [{"node":{"Charecter":"Hulk","Publisher":"Marvel","Movie":"Avengers"}},{"node":{"Charecter":"Wolverine","Publisher":"Marvel","Movie":"X-Men"}},{"node":{"Charecter":"Superman","Publisher":"DC","Movie":"Man of steel"}}]" const result = Object.values(data.reduce((obj, { node: { Publisher: p, ...rest }}) => { // define key if not defined obj[p] = obj[p] || { Franchise: p, Data: [] }; // push to the array obj[p].Data.push(rest); return obj; }, {})); console.log(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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