Ich habe ein Array von Objekten und wenn ich stringify bin, sieht es so aus:
"[[{"entrReqInv": "Neither"},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]]"
Wie kann ich die leeren {}
s entfernen?
var newArray = array.filter(value => Object.keys(value).length !== 0);
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;
});
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);
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.
Einfacher zu verstehen:
let primaryArray = [{key:'value'},{},{},{}]
let removeObsoletesArray = []
primaryArray.forEach( element => {
if(element.length > 0){
removeObsoletesArray.Push(element)
}
})
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);