I have an array of objects and when I stringify, it looks like this:
"[[{"entrReqInv": "Neither"},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]]"
How can I remove the empty {}s?
-
@jfriend00 I edited the question to reflect proper JS object syntax.Jackson Holiday Wheeler– Jackson Holiday Wheeler2018年08月18日 13:11:10 +00:00Commented Aug 18, 2018 at 13:11
9 Answers 9
var newArray = array.filter(value => Object.keys(value).length !== 0);
5 Comments
I would recommend using the following code:
var newArray = array.filter(value => JSON.stringify(value) !== '{}');
I did not use Object.keys(value).length !== 0 because it not only removes empty objects { } but also removes empty arrays [ ]. If you only want to remove empty objects, use the above method.
Comments
You can use Array.prototype.filter to remove the empty objects before stringifying.
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;
});
5 Comments
Array.isArray(el) to the filter.If your array of objects is like -
finalobj--- [ { 'patient._id': '123' },
{ 'patient.birthDate': 'lt2013-01-14', {}, {} } ]
Then use the below line to remove the blank object --
var newArray = obj.filter((value: {}) => Object.keys(value).length !== 0);
Comments
Simpler to understand:
let primaryArray = [{key:'value'},{},{},{}]
let removeObsoletesArray = []
primaryArray.forEach( element => {
if(element.length > 0){
removeObsoletesArray.push(element)
}
})
1 Comment
Here's what I would do, for progressive enhancement reasons:
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);
5 Comments
splice() are wrong, it should be (i, 1). But this will also skip the element after the one you splice out, because that element will become i.n = Object.keys(o).length;const arrValues = [{
x: 100
}, {
x: 200
}, {}];
let filteredArra = arrValues.filter(
obj => !(obj && Object.keys(obj).length === 0)
);
Comments
If you want to make this a bit more readable then i recommend combining with lodash:
var filteredArray = array.filter(value => !_.isEmpty(value));
This should filter for empty object and also undefined.
Comments
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);