1107 Stimmen

Wie kann man in JavaScript einem Objekt ein Element bedingt hinzufügen?

Ich möchte ein Objekt erstellen, zu dem ein Element bedingt hinzugefügt wird. Der einfache Ansatz ist:

var a = {};
if (someCondition)
    a.b = 5;

Jetzt würde ich gerne einen idiomatischeren Code schreiben. Ich versuche es:

a = {
    b: (someCondition? 5 : undefined)
};

Aber jetzt, b ist ein Mitglied von a deren Wert ist undefined . Dies ist nicht das gewünschte Ergebnis.

Gibt es eine praktische Lösung?

Update

Ich suche nach einer Lösung, die den allgemeinen Fall mit mehreren Mitgliedern behandeln kann.

a = {
  b: (conditionB? 5 : undefined),
  c: (conditionC? 5 : undefined),
  d: (conditionD? 5 : undefined),
  e: (conditionE? 5 : undefined),
  f: (conditionF? 5 : undefined),
  g: (conditionG? 5 : undefined),
 };

5voto

Robert Koritnik Punkte 100480

Diese Frage ist schon seit langem beantwortet, aber bei der Betrachtung anderer Ideen bin ich auf einige interessante Ableitungen gestoßen:

der gleichen Eigenschaft undefinierte Werte zuweisen und sie anschließend löschen

Erstellen Sie Ihr Objekt mit einem anonymen Konstruktor und weisen Sie nicht definierte Mitglieder immer demselben Schnuller Mitglied, das Sie ganz am Ende entfernen. Auf diese Weise erhalten Sie eine einzige Zeile (hoffentlich nicht zu komplex) pro Mitglied + 1 zusätzliche Zeile am Ende.

var a = new function() {
    this.AlwaysPresent = 1;
    this[conditionA ? "a" : "undef"] = valueA;
    this[conditionB ? "b" : "undef"] = valueB;
    this[conditionC ? "c" : "undef"] = valueC;
    this[conditionD ? "d" : "undef"] = valueD;
    ...
    delete this.undef;
};

5voto

Das folgende Codeschnipsel sollte funktionieren.

const a = {}

const conditionB = true;
const conditionC = true;
const conditionD = true;
const conditionE = true;

const b = {
  ...(conditionB && { b : 5}),
  ...(conditionC && { c : 5}),
  ...(conditionD && { d : 5}),
  ...(conditionE && { e : 5}),
 };

console.log(b);

4voto

Mickl Punkte 88

Wenn Sie dies serverseitig tun möchten (ohne Jquery), können Sie Lodash 4.3.0 verwenden:

a = _.pickBy({ b: (someCondition? 5 : undefined) }, _.negate(_.isUndefined));

Und das funktioniert mit lodash 3.10.1

a = _.pick({ b: (someCondition? 5 : undefined) }, _.negate(_.isUndefined));

2voto

Gimnath Punkte 626
const isAdult = true;

const obj = {
  ...(isAdult ? { age: 18 }: { age: 17}),
};

//>> { student: 18 }

2voto

Madhankumar Punkte 360
var a = {
    ...(condition ? {b: 1} : '') // if condition is true 'b' will be added.
}

Ich hoffe, dass dies der effizienteste Weg ist, um einen Eintrag auf der Grundlage der Bedingung hinzuzufügen. Weitere Informationen über das bedingte Hinzufügen von Einträgen innerhalb eines Objektliterales.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X