2017-04-16 4 views
0

In erster Linie eine es6/7 Frage, die sich mit der Destrukturierung von Objekten beschäftigt.Beim Erstellen eines Objekts, wenn ein Wert nicht definiert ist, nicht in das neue Objekt einfügen

Angenommen, ich habe diese Beispielfunktion:

const sample = (var1, var2) => { 
    const obj = { 
    one: var1 
    }; 

    if (var2) { 
    obj.two = var2; 
    } 

    return obj; 
}; 

Sein eine Art zu sagen, „das erste Argument erwartet wird, wenn das zweite Argument definiert wird es zu dem Objekt hinzufügen zu“.

Gibt es einen eleganteren Weg, den gleichen Effekt zu erzielen, aber mit der Destrukturierung von Objekten?

+0

Die nächstgelegene ich denken kann ist: 'const Probe = (eins, zwei) => ({ein, zwei}); 'Das würde immer noch die 'two'-Eigenschaft definieren, aber der Wert wäre' undefiniert '. – 4castle

+0

Ja, ich bin auch darauf gestoßen. Für viele Fälle würde es funktionieren, aber manchmal kann nur die Existenz der Eigenschaft ein Problem sein. – Geuis

+1

dann würde ich es als const sample = (eins, zwei) => zwei schreiben? {Eins, Zwei}: {Eins}; ' – Thomas

Antwort

3

Sie können auch Ihre Funktion als

const sample = (one, two) => two? {one, two}: {one}; 

Es ist eine Art zu sagen, schreiben Sie „das erste Argument ist zu erwarten, wenn das zweite Argument definiert wird es zu dem Objekt hinzufügen zu“

Wie bei Ihrem Code, seien Sie vorsichtig mit den Werten, die Sie als zweites Argument hinzufügen. Es gibt viel mehr falsche Werte als nur undefined, von denen Sie einige vielleicht dem Ergebnis zuweisen möchten. Wenn die Kriterien, ob das zweite Argument definiert ist, ich ausdrücklich gegen undefined überprüfen würde:

const sample = (one, two) => two !== undefined? {one, two}: {one}; 
Verwandte Themen