2016-11-03 3 views
13

ich habe:ES6/Next: Objekt mit Rest Destrukturierung - Gruppierung

const props = { 
    gallery: [], 
    select:() => null, 
    one: 1, 
    two: 2, 
} 

ich es mit destrukturiert kann:

const {gallery, select, ...other} = props 

ich drei Variablen jetzt haben:

  • Galerie = []
  • wählen = () => null
  • andere = {one: 1,two: 2}

Ist es möglich, eine Gruppierung angeben destucture?

Etwas Ähnliches (dies ist nicht zur Arbeit gehen, aber ich hoffe, es ist klar zu sehen, was ich zu tun versuchen):

const {{gallery, select}: specific, ...other} = props 

So muss ich zwei Variablen:

  • spezifische = {gallery: [], select:() => null}
  • andere = {one: 1,two: 2}

ich es auf der höheren Ebene lösen könnte und die Requisiten auf diese Weise bauen:

const props = { 
    specific: { 
    gallery: [], 
    select:() => null, 
    }, 
    other: { 
    one: 1, 
    two: 2, 
    } 
} 

Aber ich frage mich nur, wenn dies mit Destrukturierung möglich ist.

+0

Wahrscheinlich mit getan werden könnte [Ausbreitungseigenschaften] (https://github.com/sebmarkbage/ecmascript-rest-spread#spread-properties), aber das ist nicht verfügbar in ES6 noch –

+0

@SamiKuhmonen Es wird nie in ES6 verfügbar sein. Die ES6-Spezifikation wurde bereits festgelegt. –

+0

@Gothdo Mehrdeutige Formulierung, ich meine, dass es in ES Version 6 noch nicht verfügbar ist, aber möglicherweise in späteren Versionen. –

Antwort

8

Was ist damit? others enthält auch die specific Daten und ich muss zuerst auf die props zugreifen (vielleicht könnte dies verbessert werden), aber ich denke, dass es im Grunde Gruppen beim Destrukturieren gruppiert. Es funktioniert, weil Sie einen Standardwert zuweisen kann, wenn das Attribut nicht existiert:

const props = { 
 
    gallery: [], 
 
    select:() => null, 
 
    one: 1, 
 
    two: 2, 
 
} 
 

 
const {gallery : gal, select : sel} = props; 
 
const {specific: specific={gallery: gal, select: sel}, ...others} = props; 
 

 
console.log(specific); 
 
console.log(others);

EDIT

Sie können auch

const {gallery : gal, select : sel} = props; 
const {specific: specific={gallery: gal, select: sel}, ...others} = props; 

mit ändern:

const {specific: specific={gallery: props.gallery, select: props.select}, ...others} = props; 

wenn Sie es in einer Zeile möchten.

Auch maioman's answer löst das Problem, das ich erwähnte mit others enthält die specific Daten und nicht direkt auf Requisiten zugreifen.

5

Stretching Syntax (und Lesbarkeit) bis an die Grenze Sie dies tun könnte:

(Erklärung zu dem Code in den Kommentaren)

const props = { 
 
    gallery: [], 
 
    select:() => null, 
 
    one: 1, 
 
    two: 2, 
 
} 
 

 
/** destructuring assignment **/ 
 
const { 
 
    gallery, //extract the gallery prop 
 
    select, //extract the select prop 
 
    specific: specific={gallery, select}, 
 
    // create `specific` setting gallery and select props through default value assignment 
 
    ...others // assign to others the rest of non extracted props properties 
 
} = props; 
 

 
console.log(specific); 
 
console.log(others);

Am Ende bekommen wir ein gallery und ein select Objekt im Bereich, aber es ist uns gelungen, sie auch Eigenschaften eines neuen specific Objekts zu machen.

Nutzungs Warnung: Objekt Ausbreitung ist noch ein Vorschlag

+0

Ich bin ziemlich neu in stackoverflow, also bin ich mir nicht wirklich sicher und ich könnte mit meiner Annahme falsch liegen, aber es scheint, als ob du meine Antwort benutzt und geändert hast ... hättest du nicht in meinem Kommentar kommentieren sollen eine neue Antwort, wenn das der Fall ist? –

+0

@ CésarLandesa auch wenn Schnipsel gleichen Boilerplates teilt, ist die Lösung anders, also IMHO ist es in Ordnung ... – maioman

+0

Aber die Lösung basiert auf der gleichen Idee, um das Hauptproblem zu lösen: mit dem Standardwert zu gruppieren, wenn Destrukturierung ... dann Sie haben dieses Konzept zwar verbessert, aber basierend auf meinem Code und meiner Hauptidee. Ich denke, dass es eine Frage der Perspektive ist, aber für mich sieht es wie eine Modifikation meiner Idee aus und nicht eine andere Lösung. –

Verwandte Themen