例如:
obj={
a:123,
b:234,
c:'',
d:[
{
ee:444
},
{}
],
t:[
{
ty:'',
fd:{
ff:{
et:[],
ert:''
}
}
}
]
}
类似这种去除所有空值,包括[],{},如果子级都删除了,父级为空也要删除
例如:
obj={
a:123,
b:234,
c:'',
d:[
{
ee:444
},
{}
],
t:[
{
ty:'',
fd:{
ff:{
et:[],
ert:''
}
}
}
]
}
类似这种去除所有空值,包括[],{},如果子级都删除了,父级为空也要删除
你可以使用递归来删除复杂对象中的空值。下面是一个例子:
function removeEmptyValues(obj) {
// 判断是否为对象
if (typeof obj === 'object') {
// 如果是数组
if (Array.isArray(obj)) {
for (let i = obj.length - 1; i >= 0; i--) {
const value = obj[i];
// 递归删除数组中的空值
if (isEmpty(value)) {
obj.splice(i, 1);
} else {
removeEmptyValues(value);
}
}
// 如果是对象
} else {
for (let key in obj) {
const value = obj[key];
// 递归删除对象中的空值
if (isEmpty(value)) {
delete obj[key];
} else {
removeEmptyValues(value);
}
}
// 如果对象为空,则删除父级的对应属性
if (isEmpty(obj)) {
return null;
}
}
}
return obj;
}
// 判断值是否为空
function isEmpty(value) {
if (typeof value === 'object' && value !== null) {
// 数组不为空
if (Array.isArray(value) && value.length > 0) {
return false;
}
// 对象不为空
if (Object.keys(value).length > 0) {
return false;
}
// 其他对象类型为空
return true;
}
// 非对象类型为空
return value === '' || value === null;
}
// 测试
const obj = {
a: 123,
b: 234,
c: '',
d: [
{
ee: 444
},
{}
],
t: [
{
ty: '',
fd: {
ff: {
et: [],
ert: ''
}
}
}
]
};
const result = removeEmptyValues(obj);
console.log(result);
输出处理后的结果:
{
a: 123,
b: 234,
d: [
{
ee: 444
}
]
}
注意,这里并没有删除空字符串属性c和空对象属性{},因为你的要求是如果子级都删除了,父级为空也要删除。在这个例子中,属性c和属性{}都还有兄弟节点,所以它们被保留了