现在有一个对象,需要处理一下,如下:
var obj = {
a: {
a_1: 'qwe',
a_2: undefined,
a_3: function(a, b) {
return a + b;
},
a_4: {
a_4_1: 'qwe',
a_4_2: undefined,
a_4_3: function(a, b) {
return a + b;
},
a_4_4: {
a_4_4_1: undefined,
a_4_4_2: undefined,
a_4_4_3: undefined,
a_4_4_4: {
a_4_4_4_1: undefined,
a_4_4_4_2: undefined,
a_4_4_4_3: undefined,
a_4_4_4_4: undefined,
a_4_4_4_5: undefined,
a_4_4_4_6: undefined
}
}
}
},
b: [{
a_1: 'qwe',
a_2: undefined,
a_3: function(a, b) {
return a + b;
},
a_4: {
a_4_1: 'qwe',
a_4_2: undefined,
a_4_3: function(a, b) {
return a + b;
},
a_4_4: {
a_4_4_1: undefined,
a_4_4_2: undefined,
a_4_4_3: undefined,
a_4_4_4: {
a_4_4_4_1: undefined,
a_4_4_4_2: undefined,
a_4_4_4_3: undefined,
a_4_4_4_4: undefined,
a_4_4_4_5: undefined,
a_4_4_4_6: undefined
}
}
}
}],
c: [{
a: undefined,
b: undefined,
c: undefined,
d: undefined
}, {
a: undefined,
b: undefined,
c: undefined,
d: undefined
}]
};
需要把他处理为这样,如下:
var obj2 = {
a: {
a_1: 'qwe',
a_3: function(a, b) {
return a + b;
},
a_4: {
a_4_1: 'qwe',
a_4_3: function(a, b) {
return a + b;
}
}
},
b: [{
a_1: 'qwe',
a_3: function(a, b) {
return a + b;
},
a_4: {
a_4_1: 'qwe',
a_4_3: function(a, b) {
return a + b;
}
}
}],
c: [{}, {}]
};
需要注意的地方有:
1.无效值需要去掉,如undefined,null,‘’,{}等;
2.如果其中有属性为js对象,那么如果其中的无效值去掉后变为{},那么这个属性也属于无效值,应该去掉;
3.如果其中有属性是回调函数,则不能影响他的正常使用;
4.如果其中有数组,则不能影响数组的长度,即最多处理为[{},{},{}]。
我过去试过几种方法:
1.JSON.parse(JSON.stringify());会影响其中的回调函数;
2.写过自定义方法,如下:
function delUndefined(ob) {
for (let e in ob) {
if (typeof(ob[e]) === 'undefined' || ob[e] === null) {
delete ob[e];
}
else if (ob[e].constructor === Object) {
if (Object.keys(ob[e]).length === 0) {
delete ob[e];
} else {
delUndefined(ob[e]);
}
}
else if (ob[e].constructor === Array) {
ob[e].map(function (seg) {
if (typeof(seg) === 'object') {
delUndefined(seg);
}
});
}
}
return ob;
}
但是如果js对象层级太多的话,空js对象{}处理不干净。
现在真是头痛,只好请教前辈们了~~