1
votes

Besoin de déplacer les nœuds enfants dans json vers le nœud parent

J'ai le JSON suivant -

[{ 
 "ctin":"guju3j3jgjh3b",
 "inum":"OS1920/16060",
 "idt":"01-08-2019",
 "val":17000.00,
 "pos":"20",
 "rchrg":"N"
}, { 
 "ctin":"guju3j3jgjh3b",
 "inum":"OS1920/16066",
 "idt":"02-08-2019",
 "val":17602.00,
 "pos":"29",
 "rchrg":"N"
}, { 
 "ctin":"guj324djgjh3b",
 "inum":"OS1920/16064",
 "idt":"03-08-2019",
 "val":19124,
 "pos":"26",
 "rchrg":"N"
},
.
.
.
]

Je dois combiner l'enfant et le nœud parent. Pour que le résultat soit le suivant -

[{ 
 "ctin":"guju3j3jgjh3b",
 "inv":[ 
  { 
     "inum":"OS1920/16060",
     "idt":"01-08-2019",
     "val":17000.00,
     "pos":"20",
     "rchrg":"N"
  }, { 
     "inum":"OS1920/16066",
     "idt":"02-08-2019",
     "val":17602.00,
     "pos":"29",
     "rchrg":"N"
  }
 ]
},{ 
 "ctin":"guj324djgjh3b",
 "inv":[ 
  { 
     "inum":"OS1920/16064",
     "idt":"03-08-2019",
     "val":19125.00,
     "pos":"26",
     "rchrg":"N"
  }
 ]
}
.
.
.
]

J'ai essayé de chercher SO, mais pas de chance.

J'ai également essayé de supprimer le nœud "INV", mais pas de chance. Il va juste [objet objet] dans Angular en raison de la boucle des nœuds les uns dans les autres.


0 commentaires

3 Réponses :


2
votes

Je ne peux que supposer que le JSON est un tableau. Vous pouvez utiliser une combinaison des méthodes .map , .reduce et .concat de Array pour obtenir ce que vous voulez:

const result = data
  .map((item) => item.inv.map((inv) => ({ ctin: item.ctin, ...inv })))
  .reduce((a, b) => a.concat(b), []);


2 commentaires

Ou simplement .flatMap .


@VLAZ je ne le recommanderai pas encore, jusqu'à ce qu'il soit pris en charge par tous les principaux navigateurs



-1
votes

Essayez ceci,

for (var j = 0; j < this.datasource.length; j++) {
  for (var i = 0; i < this.datasource1[j].inv.length; i++) {
     this.datasource[j].inv[i].ctin = this.datasource[j]["ctin"];
  }
  /* delete this.datasource[j]['ctin'];
  this.result.push(this.datasource[j].inv); */
}


0 commentaires

3
votes

Cela peut être fait en utilisant la fonction map et concat:

let notFlattened = data.map(({ctin, inv}) => {
    inv = inv.map(r=> {
          r.ctin = ctin;
          return r;
      });
    return inv;
})
let merged = [].concat.apply([], notFlattened);

console.log(merged);

et le code est:

const data = [{
  "ctin":"guju3j3jgjh3b",
  "inv":[
   {
      "inum":"OS1920/16060",
      "idt":"01-08-2019",
      "val":17000.00,
      "pos":"20",
      "rchrg":"N"
   }, {
      "inum":"OS1920/16066",
      "idt":"02-08-2019",
      "val":17602.00,
      "pos":"29",
      "rchrg":"N"
   }
  ]
 },{
  "ctin":"guj324djgjh3b",
  "inv":[
   {
      "inum":"OS1920/16064",
      "idt":"03-08-2019",
      "val":19125.00,
      "pos":"26",
      "rchrg":"N"
   }
  ]
 }
];


0 commentaires