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

15voto

icetbr Punkte 133

Ich habe eine kleiner Benchmark mit einer weiteren Option. Ich möchte "totes Gewicht" von einigen Objekten entfernen. In der Regel sind das fehlerhafte Werte.

Hier sind die benny Ergebnisse:

sauber

const clean = o => {
    for (const prop in o) if (!o) delete o[prop];
}

clean({ value });

Verbreitung

let a = {
    ...(value && {b: value})
};

wenn

let a = {};
if (value) {
    a.b = value;
}

Ergebnisse

clean  :  84 918 483 ops/s, ±1.16%    | 51.58% slower    
spread :  20 188 291 ops/s, ±0.92%    | slowest, 88.49% slower    
if     : 175 368 197 ops/s, ±0.50%    | fastest

14voto

mateos Punkte 1070

Dies ist wahrscheinlich die kürzeste Lösung mit ES6

console.log({
   ...true && {foo: 'bar'}
})
// Output: {foo:'bar'}

console.log({
   ...false && {foo: 'bar'}
})
// Output: {}

10voto

jwchang Punkte 10203

Ich würde dies tun

var a = someCondition ? { b: 5 } : {};

7voto

Casey Chu Punkte 23975

Wenn das Ziel darin besteht, dass das Objekt in sich geschlossen erscheint und sich innerhalb eines Satzes von geschweiften Klammern befindet, können Sie dies versuchen:

var a = new function () {
    if (conditionB)
        this.b = 5;

    if (conditionC)
        this.c = 5;

    if (conditionD)
        this.d = 5;
};

7voto

Milad Punkte 25732

Sie können alle Ihre nicht definierten Werte ohne Bedingung hinzufügen und dann JSON.stringify um sie alle zu entfernen:

const person = {
  name: undefined,
  age: 22,
  height: null
}

const cleaned = JSON.parse(JSON.stringify(person));

// Contents of cleaned:

// cleaned = {
//   age: 22,
//   height: null
// }

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