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

1voto

fandu139 Punkte 19

Ich bevorzuge es, diesen Code zu verwenden, Sie können diesen Code ausführen

const three = {
  three: 3
}

// you can active this code, if you use object `three is null`
//const three = {}

const number = {
  one: 1,
  two: 2,
  ...(!!three && three),
  four: 4
}

console.log(number);

1voto

Đinh Carabus Punkte 3139

Das ist die prägnanteste Lösung, die mir einfällt:

var a = {};
conditionB && a.b = 5;
conditionC && a.c = 5;
conditionD && a.d = 5;
// ...

1voto

htafoya Punkte 16630

Mit der lodash-Bibliothek können Sie _.omitBy

var a = _.omitBy({
    b: conditionB ? 4 : undefined,
    c: conditionC ? 5 : undefined,
}, _.IsUndefined)

Dies ist praktisch, wenn Sie Anfragen haben, die optional sind

var a = _.omitBy({
    b: req.body.optionalA,  //if undefined, will be removed
    c: req.body.optionalB,
}, _.IsUndefined)

0voto

Yunchi Punkte 5481

Ich denke, Ihr erster Ansatz, Mitglieder bedingt hinzuzufügen, ist völlig in Ordnung. Ich stimme nicht wirklich damit überein, ein Mitglied nicht haben zu wollen b de a mit einem Wert von undefined . Es ist einfach genug, eine undefined Prüfung mit Verwendung eines for Schleife mit dem in Betreiber. Aber wie auch immer, Sie könnten einfach eine Funktion schreiben, die Folgendes herausfiltert undefined Mitglieder.

var filterUndefined = function(obj) {
  var ret = {};
  for (var key in obj) {
    var value = obj[key];
    if (obj.hasOwnProperty(key) && value !== undefined) {
      ret[key] = value;
    }
  }
  return ret;
};

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

Sie können auch die delete Operator, um das Objekt an Ort und Stelle zu bearbeiten.

0voto

M Naufal Helmi Punkte 77

Ich hoffe, dies hilft bei der Lösung Ihres Problems

<body>

    <h1>GeeksforGeeks</h1>

    <p id="geeks"></p>

    <!-- Script to check array include
        object or not -->
    <script>
        var obj = {"geeks1":10, "geeks2":12}
        var arr = ["geeks1", "geeks2", "geeks3", obj];

        if(arr.filter(value=> value==obj).length > 0)
            document.write("true");
        else
            document.write("false");
    </script>
</body>

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