Javascript 如何从JS中的数组中删除中的空对象

Javascript 如何从JS中的数组中删除中的空对象,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个对象数组,当我字符串化时,它看起来是这样的: "[[{"entrReqInv": "Neither"},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]]" 如何删除空的{}s?在串接之前,可以使用删除空对象 var newArray = array.filter(value => Object.keys(value).length !== 0); JSON.stringify(array.filte

我有一个对象数组,当我字符串化时,它看起来是这样的:

"[[{"entrReqInv": "Neither"},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]]"
如何删除空的
{}
s?

在串接之前,可以使用删除空对象

var newArray = array.filter(value => Object.keys(value).length !== 0);
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;
});

出于逐步增强的原因,我会这样做:

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);
var aryAry=[[{prop:'value'},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}];
变量a=aryAry[0],r=[];
对于(变量i=0,l=a.length;i 0){
r、 推(o);
}
}
控制台日志(r);
让arr=[{a:1},{},{c:3}];
arr=..filter(arr,v=>..keys(v.length!==0);
控制台日志(arr)

更容易理解:

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

我建议使用以下代码:

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

我没有使用Object.keys(value).length!==0,因为它不仅删除空对象{},而且还删除空数组[]。如果只想删除空对象,请使用上述方法。

如果对象数组类似-

finalobj--- [ { 'patient._id': '123' },
  { 'patient.birthDate': 'lt2013-01-14', {}, {} } ]

然后使用下面的行删除空白对象-< /P>



这也会过滤掉空数组。@Roamer-1888有没有办法区分数组和其他对象?无论如何,他说他有一系列的对象,这可能并不重要。事实上,我们不知道这是否重要。如果是,则将
Array.isArray(el)
添加到过滤器中。虽然不是真正的向后兼容,但仍然是一个解决方案。谢谢大家!!我终于成功了!!!我真的应该上传一张照片。。。。是她:)谢谢你的帮助!箭头函数使数组方法更易于阅读。我同意,但你应该给它一个提示,并添加一个es5示例,因为它可能不适用于所有地方。我的答案是es5版本的.array.filter((item)=>Object.keys(item.length)@Sinux答案很好,但请记住,对数组调用filter()不会更改原始数组,因此您必须重新分配它,例如,array=array.filter((项)=>Object.keys(项).length);
splice()
的参数错误,应该是
(i,1)
。但这也会跳过拼接后的元素,因为该元素将成为
i
。也不清楚他是否要修改数组本身,只是在串接时不包括空元素。对于
n=Object.keys(o).length我很久以前就不再担心IE8了。如果他需要polyfill,他可以查找。根据,您今年失去了超过14%的市场份额。@jfriend00我编辑了这个问题以反映正确的JS对象语法。您可能还需要添加关于answerHi的解释,欢迎来到Stack Overflow。当回答一个已经有一些答案的问题时,请务必补充一些额外的见解,说明为什么您提供的回答是实质性的,而不是简单地重复原始海报已经审查过的内容。这在“仅代码”答案中尤其重要,例如您提供的答案。如果您这样做,这将起作用:Object.keys(dictionary.length)。
var newArray = obj.filter((value: {}) => Object.keys(value).length !== 0);