簡體   English   中英

map 陣列與多個 object 到另一個陣列

[英]map array with more than one object into another array

這是原始數組:它可以有一個或多個對象。 在每個 object 中都有一個地址和一個 mitglieder 數組。

    const original = [
    {
      "adresse":{
        "strasse":"Streetone",
        "plz":"55555",
        "ort":"Hamburg",
        "xy": "aaaaaa"
      },
      "mitglieder":[
        {
          "zugestimmt":true,
          "nummer":"345",
          "nachname":"Meier",
          "vorname":"Peter",
          "geburtsDatum":"1980-01-01"
        },
        {
          "zugestimmt":true,
          "nummer":"435",
          "nachname":"Haushalt",
          "vorname":"Anderer",
          "geburtsDatum":"1980-01-01"
        },
      ]
    },
    {
      "adresse":{
        "street":"Streettwo",
        "plz":"34444",
        "ort":"Hamburg",
        "xy": "bbbbb"
      },
      "mitglieder":[
        {
          "zugestimmt":true,
          "nummer":"345",
          "nachname":"Muster",
          "vorname":"Maria",
          "geburtsDatum":"1980-01-01",
          "xy" : {a:'1', b:'2'}
        },
        {
          "zugestimmt":true,
          "nummer":"345",
          "nachname":"Muster",
          "vorname":"Maria",
          "geburtsDatum":"1980-01-01",
          "xy" : {a:'1', b:'2'}
        },
      ]
    }
  ];

我想把它 map 放到這個數組中:這應該是原始數組中所有對象的 mitglieder 數組。 街道,plz 和 ort 來自地址鍵。 “arrayIwant”應該只有這些屬性,而不是屬性“xy”或其他可以在原始數組中的屬性。

let arrayIwant = [
    {
    vorname: original[0].mitglieder[0].vorname,
    nachname: original[0].mitglieder[0].nachname,
    geburtsdatum: original[0].mitglieder[0].geburtsDatum,
    zugestimmt: original[0].mitglieder[0].zugestimmt,
    strasse: original[0].adressse.street,
    plz: original[0].adresse.plz,
    ort: original[0].adresse.ort,
    
  },
  {
     vorname: original[0].mitglieder[1].vorname,
    nachname: original[0].mitglieder[1].nachname,
    geburtsdatum: original[0].mitglieder[1].geburtsDatum,
    zugestimmt: original[0].mitglieder[1].zugestimmt,
    strasse: original[0].adresse.street,
    plz: original[0].adresse.plz,
    ort: original[0].adresse.ort,
  },
  {
    vorname: original[1].mitglieder[0].vorname,
    nachname: original[1].mitglieder[0].nachname,
    geburtsdatum: original[1].mitglieder[0].geburtsDatum,
    zugestimmt: original[1].mitglieder[0].zugestimmt,
    strasse: original[1].adresse.street,
    plz: original[1].adresse.plz,
    ort: original[1].adresse.ort,
  },
  {
    vorname: original[1].mitglieder[1].vorname,
    nachname: original[1].mitglieder[1].nachname,
    geburtsdatum: original[1].mitglieder[1].geburtsDatum,
    zugestimmt: original[1].mitglieder[1].zugestimmt,
    strasse: original[1].adresse.street,
    plz: original[1].adresse.plz,
    ort: original[1].adresse.ort,
  }
 ]

感謝您的幫助

Array#flatMapArray#map與展開運算符一起使用,如下所示:

 const original = [ { "adresse":{ "street":"Streetone", "plz":"55555", "ort":"Hamburg" }, "mitglieder":[ { "zugestimmt":true, "nummer":"345", "nachname":"Meier", "vorname":"Peter", "geburtsDatum":"1980-01-01" }, { "zugestimmt":true, "nummer":"435", "nachname":"Haushalt", "vorname":"Anderer", "geburtsDatum":"1980-01-01" }, ] }, { "adresse":{ "street":"Streettwo", "plz":"34444", "ort":"Hamburg" }, "mitglieder":[ { "zugestimmt":true, "nummer":"345", "nachname":"Muster", "vorname":"Maria", "geburtsDatum":"1980-01-01" }, { "zugestimmt":true, "nummer":"345", "nachname":"Muster", "vorname":"Maria", "geburtsDatum":"1980-01-01" }, ] } ], output = original.flatMap( ({adresse,mitglieder}) => mitglieder.map(mitg => delete mitg.nummer && ({...mitg,...adresse})) ); console.log( output );

這很簡單。 您想為original數組的每個元素中的mitglieder數組的每個元素創建一個新的 object。

 let original = [ { "adresse":{ "street":"Streetone", "plz":"55555", "ort":"Hamburg" }, "mitglieder": [ { "zugestimmt":true, "nummer":"345", "nachname":"Meier", "vorname":"Peter", "geburtsDatum":"1980-01-01" }, { "zugestimmt":true, "nummer":"435", "nachname":"Haushalt", "vorname":"Anderer","geburtsDatum":"1980-01-01" }, ] }, { "adresse":{ "street":"Streettwo", "plz":"34444", "ort":"Hamburg"}, "mitglieder": [ { "zugestimmt":true, "nummer":"345", "nachname":"Muster", "vorname":"Maria", "geburtsDatum":"1980-01-01" }, { "zugestimmt":true, "nummer":"345", "nachname":"Muster", "vorname":"Maria", "geburtsDatum":"1980-01-01" }, ] } ] myArray = original.reduce( (accum, elem) => { elem.mitglieder.forEach( (mitglieder) => { obj = {} // create the new object Object.assign(obj, elem.adresse) // copy the adresse properties Object.assign(obj, mitglieder) // copy the mitglieder properties obj.strasse = obj.street; // rename property delete obj.street // remove property with old name delete obj.nummer // remove unwanted property accum.push(obj) // put the new object into the accumulator }) return accum }, []) console.log(myArray)

我已經用我需要的道具在 Output 陣列上完成了 map:

const result = output.map(mitglied => ({
      vorname: mitglied.vorname,
      nachname: mitglied.nachname,
      geburtsDatum: mitglied.geburtsDatum,
      zugestimmt: mitglied.zugestimmt,
      strasse: mitglied.street,
      plz: mitglied.plz,
      ort: mitglied.ort
    }))

現在我的結果中只有我需要的道具。 感謝 PeterKA 和 Tribrogargan 的幫助。

暫無
暫無

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

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