如何删除数组中的空对象?
How to remove empty object in array?
我正在尝试从以下结构中删除空对象 {}。
data = [{
"total" : "value",
"status" : "statusVal",
"recs" : [{
"total" : "value",
"region" : "name",
"recs" : [{},{
"recs" : [{
"recs" : [{
"value" : "a",
"label" : "fn"
}]
}]
}]
}]
}]
这是我的 JavaScript 代码,我在其中处理数据并尝试从结果中删除空对象。
var result = json.parse(data);
for(var i=0;i<result.length;i++){
if(result[i].hasOwnProperty("recs")){
var fset = result[i].recs;
for(var j=0;j<fset.length;j++){
if(fset[j].recs === undefined || fset[j].recs === null){
delete fset[j].recs;
}
if(fset[j].hasOwnProperty("recs")){
var sset = fset[i].recs;
for(var k=0;k<sset.length;k++){
var tset = sset[i].recs;
if(sset[k].hasOwnProperty("recs")){
for(var z=0;z<tset.length;z++){
if(tset[z].hasOwnProperty("recs")){
// logic to push
}
}
}
}
}
}
}
}
我尝试检查 null 和 undefined 并且 属性 检查 bool 是否为 false。由于空 {} 始终将长度返回为 1,因此也排除了这种情况。我被困在这里处理空对象的删除。
以上代码删除了整个 recs 节点。你能帮我找到我丢失的东西吗?
检查 Object.keys()
的长度以查看对象是否为空。
Object.keys(fset[j].recs).length === 0
你无法手动遍历数组的所有动态层次,所以最好编写具有递归函数调用的函数。
var data = [{
"total": "value",
"status": "statusVal",
"recs": [{
"total": "value",
"region": "name",
"recs": [{}, {
"recs": [{
"recs": [{
"value": "a",
"label": "fn"
}]
}]
}]
}]
}]
function removeEmpty(ary) {
ary.forEach((item, index) => {
if (Object.keys(item).length === 0) { ary.splice(index, 1); }
else if (item.recs && item.recs.length > 0)
removeEmpty(item.recs)
});
}
removeEmpty(data)
console.log(data)
我正在尝试从以下结构中删除空对象 {}。
data = [{
"total" : "value",
"status" : "statusVal",
"recs" : [{
"total" : "value",
"region" : "name",
"recs" : [{},{
"recs" : [{
"recs" : [{
"value" : "a",
"label" : "fn"
}]
}]
}]
}]
}]
这是我的 JavaScript 代码,我在其中处理数据并尝试从结果中删除空对象。
var result = json.parse(data);
for(var i=0;i<result.length;i++){
if(result[i].hasOwnProperty("recs")){
var fset = result[i].recs;
for(var j=0;j<fset.length;j++){
if(fset[j].recs === undefined || fset[j].recs === null){
delete fset[j].recs;
}
if(fset[j].hasOwnProperty("recs")){
var sset = fset[i].recs;
for(var k=0;k<sset.length;k++){
var tset = sset[i].recs;
if(sset[k].hasOwnProperty("recs")){
for(var z=0;z<tset.length;z++){
if(tset[z].hasOwnProperty("recs")){
// logic to push
}
}
}
}
}
}
}
}
我尝试检查 null 和 undefined 并且 属性 检查 bool 是否为 false。由于空 {} 始终将长度返回为 1,因此也排除了这种情况。我被困在这里处理空对象的删除。
以上代码删除了整个 recs 节点。你能帮我找到我丢失的东西吗?
检查 Object.keys()
的长度以查看对象是否为空。
Object.keys(fset[j].recs).length === 0
你无法手动遍历数组的所有动态层次,所以最好编写具有递归函数调用的函数。
var data = [{
"total": "value",
"status": "statusVal",
"recs": [{
"total": "value",
"region": "name",
"recs": [{}, {
"recs": [{
"recs": [{
"value": "a",
"label": "fn"
}]
}]
}]
}]
}]
function removeEmpty(ary) {
ary.forEach((item, index) => {
if (Object.keys(item).length === 0) { ary.splice(index, 1); }
else if (item.recs && item.recs.length > 0)
removeEmpty(item.recs)
});
}
removeEmpty(data)
console.log(data)