web-dev-qa-db-de.com

Wie kann ich in JS ein leeres Objekt aus einem Array entfernen?

Ich habe ein Array von Objekten und wenn ich stringify bin, sieht es so aus:

"[[{"entrReqInv": "Neither"},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]]"

Wie kann ich die leeren {}s entfernen?

11
Rudy
var newArray = array.filter(value => Object.keys(value).length !== 0);
27
djfdev

Sie können Array.prototype.filter verwenden, um die leeren Objekte vor dem Stringisieren zu entfernen.

JSON.stringify(array.filter(function(el) {
    // keep element if it's not an object, or if it's a non-empty object
    return typeof el != "object" || Array.isArray(el) || Object.keys(el).length > 0;
});
8
Barmar
let arr = [{a:1},{},{c:3}];

arr = _.filter(arr,v => _.keys(v).length !== 0);

console.log(arr)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

arr = _.filter (arr, v => _.keys (v) .length! == 0);

0
Rajesh Bose

Ich würde empfehlen, den folgenden Code zu verwenden:

var newArray = array.filter(value => JSON.stringify(value) !== '{}');

Ich habe Object.keys (value) .length! == nicht verwendet, weil dadurch nicht nur leere Objekte entfernt werden {}, sondern auch leere Arrays []. Wenn Sie nur leere Objekte entfernen möchten, verwenden Sie die oben beschriebene Methode.

0
Dude

Einfacher zu verstehen:

let primaryArray = [{key:'value'},{},{},{}]
let removeObsoletesArray = []
primaryArray.forEach( element => {
   if(element.length > 0){
      removeObsoletesArray.Push(element)
   }
})
0
shahriar hasan

Folgendes würde ich aus Gründen der progressiven Verbesserung tun:

var aryAry = [[{prop: 'value'},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]];
var a = aryAry[0], r = [];
for(var i=0,l=a.length; i<l; i++){
  var n = 0, o = a[i];
  for(var q in o){
    n++;
  }
  if(n > 0){
    r.Push(o);
  }
}
console.log(r);
0
PHPglue