Entfernen Sie leere Attribute von einem Objekt in Javascript

Lesezeit: 5 Minuten

Entfernen Sie leere Attribute von einem Objekt in Javascript
abhijit

Wie entferne ich alle Attribute, die sind undefined oder null in einem JavaScript-Objekt?

(Die Frage ähnelt dieser für Arrays.)

  • Empfehlen Sie den Leuten dringend, den obersten Rang zu ignorieren und zu den ES6/ES7-Versionen hier zu wechseln, stackoverflow.com/a/38340730/124486

    – KEIN KRIEG MIT RUSSLAND

    13. Dezember 2016 um 7:54 Uhr

  • Auch ES6-Einzeiler ohne mutierendes Objekt finden Sie hier: stackoverflow.com/a/57625661/1602301

    – Hühner

    27. August 2019 um 11:40 Uhr

  • 1 Zeile Antwort ES6 -> JSON.parse(JSON.stringify(obj))

    – STAHL

    6. September 2021 um 6:27 Uhr

  • Achtung! Keines dieser 👆 funktioniert mit Arrays.

    –Martin D

    23. Dezember 2021 um 22:30 Uhr

1646309708 881 Entfernen Sie leere Attribute von einem Objekt in Javascript
Owen

Sie können das Objekt durchlaufen:

var test = {
  test1: null,
  test2: 'somestring',
  test3: 3,
}

function clean(obj) {
  for (var propName in obj) {
    if (obj[propName] === null || obj[propName] === undefined) {
      delete obj[propName];
    }
  }
  return obj
}

console.log(test);
console.log(clean(test));

Wenn Sie befürchten, dass diese Eigenschaftsentfernung die Proptype-Kette des Objekts nicht hochfährt, können Sie auch:

function clean(obj) {
  var propNames = Object.getOwnPropertyNames(obj);
  for (var i = 0; i < propNames.length; i++) {
    var propName = propNames[i];
    if (obj[propName] === null || obj[propName] === undefined) {
      delete obj[propName];
    }
  }
}

Ein paar Anmerkungen zu null vs undefined:

test.test1 === null; // true
test.test1 == null; // true

test.notaprop === null; // false
test.notaprop == null; // true

test.notaprop === undefined; // true
test.notaprop == undefined; // true

  • Eine schnelle Korrektur hinzugefügt. Eine nicht deklarierte „i“-Variable würde in den äußeren Gültigkeitsbereich gelangen, wenn dieses Snippet jemals in einer Funktion verwendet würde.

    – Eric Nguyen

    16. Dezember 2013 um 6:11 Uhr

  • Sie können die (test[i]===null || Prüfung[i]===undefiniert) zu (test[i]==Null)

    – jaf0

    24. Mai 2015 um 3:01 Uhr


  • Hallo, @EricNguyen, im Gegensatz zu C und anderen Sprachen funktioniert Javascript nicht haben Block-Scope für Variablen (nur Funktions-Scope), also die Variable ich wird immer in den Bereich nach dem auslaufen zum Block.

    – Gerardo Lima

    10. Mai 2016 um 9:54 Uhr

  • @GerardoLima, ja. Ich war irgendwie davon ausgegangen, dass dies alles in einer Funktion verpackt sein würde. Was ich meinte (vorausgesetzt, dies ist alles mit einer Funktion umschlossen), ist, dass Sie die var-Deklaration oder benötigen ich wird auch außerhalb des Funktionsumfangs lecken.

    – Eric Nguyen

    14. Mai 2016 um 2:32 Uhr

  • Dadurch wird auch der Prototyp des primitiven Objekts durchlaufen – was in den meisten Fällen nicht erwünscht ist. stackoverflow.com/a/2869372/1612318

    – Rotareti

    7. August 2016 um 22:26 Uhr

  • Dies sollte die einzige Antwort sein! Jedes dieser Schnipsel generiert ein neues Objekt, bei dem das alte nicht mutiert wird. Dies ist vorzuziehen! Eine kleine Anmerkung, wenn Sie gerade verwenden v == null Sie werden gegen prüfen undefined und null.

    – Megajin

    26. August 2019 um 12:29 Uhr


  • der cleanEmpty Rekursive Lösungen geben ein leeres Objekt zurück {} für Date-Objekte

    – Emmanuel NK

    13. Mai 2020 um 4:03 Uhr

  • Etwas mehr Lesbarkeit in den Einzeilern würde sie großartig machen !!

    – zardilior

    9. Juni 2020 um 19:12 Uhr

  • Was meinst du mit @GOXR3PLUS? Das Entfernen von Nullen aus Arrays ist so einfach wie arr = arr.filter(v=>v!==null)

    – Superole

    26. November 2020 um 7:43 Uhr

  • ein,[k,v] => Akkumulator, Schlüssel, Wert

    – Hühner

    2. März 2021 um 4:45 Uhr

1646309708 50 Entfernen Sie leere Attribute von einem Objekt in Javascript
Ben

Wenn Sie lodash oder underscore.js verwenden, ist hier eine einfache Lösung:

var obj = {name: 'John', age: null};

var compacted = _.pickBy(obj);

Dies funktioniert nur mit lodash 4, pre lodash 4 oder underscore.js, verwenden _.pick(obj, _.identity);

  • Brillant! Danke! FYI, was mir nicht klar war, ist, dass Sie es auch so verwenden könnten: foo().then(_.pickBy); // leere Ergebnisse herausfiltern

    – Maciej Gurban

    2. August 2016 um 20:36 Uhr


  • Beachten Sie, dass dies nicht zum gewünschten Ergebnis führt, wenn das Objekt falsche Werte wie 0 oder leere Zeichenfolgen enthält. Dann _.omit(obj, _.isUndefined) ist besser.

    – JHH

    23. Mai 2017 um 11:49 Uhr


  • @JHH _.isUndefined lässt keine Nullen weg, benutze _.omitBy(obj, _.isNil) beides wegzulassen undefined und null

    – Lukasz Wiktor

    29. Februar 2020 um 7:50 Uhr


  • @LukaszWiktor Richtig, die Frage hat nach undefined oder null gefragt.

    – JHH

    2. März 2020 um 9:21 Uhr

1646309708 678 Entfernen Sie leere Attribute von einem Objekt in Javascript
Wumms

Wenn jemand eine rekursive Version von Owens (und Erics) Antwort braucht, hier ist sie:

/**
 * Delete all null (or undefined) properties from an object.
 * Set 'recurse' to true if you also want to delete properties in nested objects.
 */
function delete_null_properties(test, recurse) {
    for (var i in test) {
        if (test[i] === null) {
            delete test[i];
        } else if (recurse && typeof test[i] === 'object') {
            delete_null_properties(test[i], recurse);
        }
    }
}

  • Brillant! Danke! FYI, was mir nicht klar war, ist, dass Sie es auch so verwenden könnten: foo().then(_.pickBy); // leere Ergebnisse herausfiltern

    – Maciej Gurban

    2. August 2016 um 20:36 Uhr


  • Beachten Sie, dass dies nicht zum gewünschten Ergebnis führt, wenn das Objekt falsche Werte wie 0 oder leere Zeichenfolgen enthält. Dann _.omit(obj, _.isUndefined) ist besser.

    – JHH

    23. Mai 2017 um 11:49 Uhr


  • @JHH _.isUndefined lässt keine Nullen weg, benutze _.omitBy(obj, _.isNil) beides wegzulassen undefined und null

    – Lukasz Wiktor

    29. Februar 2020 um 7:50 Uhr


  • @LukaszWiktor Richtig, die Frage hat nach undefined oder null gefragt.

    – JHH

    2. März 2020 um 9:21 Uhr

Entfernen Sie leere Attribute von einem Objekt in Javascript
Alexandre Farber

JSON.stringify entfernt die undefinierten Schlüssel.

removeUndefined = function(json){
  return JSON.parse(JSON.stringify(json))
}

  • Das hat bei mir für ein tiefes Objekt nicht funktioniert, aber Wumms Antwort oben hat es getan.

    – Suman

    1. April 2016 um 19:47 Uhr

  • Wenn Sie brauchen null behandelt werden als undefined Verwenden Sie die Ersetzungsfunktion, weitere Informationen finden Sie in dieser Antwort: stackoverflow.com/questions/286141/…

    – Hooman Askari

    30. Januar 2017 um 11:12 Uhr

  • Seien Sie sich bewusst, dass dies nicht entfernt wird null Werte. Versuchen: let a = { b: 1, c: 0, d: false, e: null, f: undefined, g: [], h: {} } und dann console.log(removeUndefined(a)). Frage war ungefähr undefined und null Werte.

    – Maid

    18. Dezember 2019 um 15:45 Uhr

  • JSON-Methoden sind für JSON-Zeichenfolgen und sollten niemals ohne ordnungsgemäße Analyse und Überprüfung für Javascript-Objekte verwendet werden.

    – Maciej Kwas

    13. November 2020 um 20:55 Uhr

923270cookie-checkEntfernen Sie leere Attribute von einem Objekt in Javascript

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy