Как удалить пустой объект из массива в JS

У меня есть массив объектов, и когда я строковый, это выглядит так:

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

Как я могу удалить пустые {} s?

Ответ 1

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

Ответ 2

Вы можете использовать Array.prototype.filter чтобы удалить пустые объекты перед строковым форматированием.

JSON.stringify(array.filter(function(el) {
    // keep element if it not an object, or if it a non-empty object
    return typeof el != "object" || Array.isArray(el) || Object.keys(el).length > 0;
});

Ответ 3

Проще понять:

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

Ответ 4

Вот что я буду делать, для прогрессивных улучшений:

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

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>

Ответ 6

Я бы порекомендовал использовать следующий код:

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

Я не использовал Object.keys(value).length! == 0, поскольку он не только удаляет пустые объекты {}, но и удаляет пустые массивы []. Если вы хотите удалить только пустые объекты, используйте вышеуказанный метод.