Objet imbriqué et déstructuration de matrice

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 }); }