J'essaie de convertir un objet en une version plus simple en utilisant la déstructuration.
Mon objet comprend un tableau imbriqué qui contient également des objets, à partir de ce tableau, j'aimerais seulement quelques champs.
Je peux faire l'objet désynchronisé de l'objet imbriqué, et le triage des matrices est bien mais pas ensemble?
Mon essai actuel ressemble à ceci:
var data = { title: "title1", bar: "asdf", innerData: [ { title: "inner-title1", foo: "asdf" }, { title: "inner-title2", foo: "asdf" } ] }; var { title, innerData: [ { title} ] } = data; console.log(title); for (var { title} of innerData) { console.log(title); }
Mais obtenez un message indiquant que innerData is not defined.
Le résultat que je souhaiterais pourrait être:
{ title: "title1", innerData: [ { title: "inner-title1" }, { title: "inner-title2" } ] };
Vous pouvez ajuster le nom de la variable à un identifiant autre que innerData
défini; Utilisez .map()
ou JSON.stringify()
, JSON.parse()
pour filtrer la propriété du title
partir des objets innerData
var {title, titles = data.innerData.map(o => ({title:o.title}))} = data;
Pour maintenir le nom de la variable innerData
, vous pouvez utiliser la déstructuration de l'objet
var [title, innerData] = [data.title, data.innerData.map(o => ({title:o.title}))];
En utilisant JSON.stringify()
, JSON.parse()
var [title, innerData] = JSON.parse(JSON.stringify([data.title, data.innerData], ["title"]));
modifier
Si l'exigence est de créer un tableau contenant toutes les propriétés de title
dans les data
vous pouvez utiliser JSON.stringify()
avec le tableau de remplacement défini sur ["title"]
, JSON.parse()
, spread
var data = { title: "title1", bar: "asdf", innerData: [ { title: "inner-title1", foo: "asdf" }, { title: "inner-title2", foo: "asdf" } ] }; var innerData = JSON.parse(JSON.stringify([data, ...data.innerData], ["title"])) console.log(innerData);
Votre déstructuration ne fait pas ce que vous pensez.
var { title, innerData: [ { title} ] } = data;
Est (essentiellement) équivalent à
var title = data.title; var title = data.innerData[0].title;
La restructuration élimine les valeurs individuelles, elle ne vous guidera pas dans le tableau. Vous devrez le faire manuellement si c'est ce que vous voulez.
Selon @loganfsmyth suggéré, je le ferai en deux étapes.
var { title } = data; for (var { title } of data.innerData) { console.log( title ); }
Edit: ma solution finale pour construire un nouvel objet json de l'ancien
const request = { innerData: [] }; ({ title } = this.data); for (const { title} of this.data.innerData) { request.innerData.push({ title }); }