gpt4 book ai didi

javascript - 删除具有未定义值的属性后删除空对象

转载 作者:行者123 更新时间:2023-11-30 11:29:36 25 4
gpt4 key购买 nike

我有一个对象:

{
a: undefined,
b: 'B',
c: { d: undefined }
}

我想删除所有具有未定义值的属性,如果对象为空,则删除父属性。

function removeEmpty (object) {
Object.keys(object).forEach((key) => {
if (object[key] && typeof object[key] === 'object') {
removeEmpty(object[key]);
}
else if (object[key] == null || !object[key].length) delete object[key]
});

return object;
}

我知道这是行不通的,因为当对象 [key] 指向“c”属性时,这个属性不是空的。

最佳答案

只需检查是否可以在清理对象后将其移除(实际上,这正是 Felix Kling 提出的)。此版本还解决了 Keith 指出的问题:

function removeEmpty(object) {
Object.keys(object).forEach((key) => {
if (object[key] && typeof object[key] === 'object') {
removeEmpty(object[key]);
if (Object.keys(object[key]).length === 0) // <---- Check whether there
delete object[key]; // <---- no objects in current one
}
else if (object[key] == null || (typeof object[key] === 'object' && object[key].length === 0)) {
delete object[key];
}
});

return object;
}
removeEmpty({
a: undefined,
b: 'B',
c: { d: undefined },
test: 1,
test2: 0,
test3: []
})

// Produces {b: "B", test: 1, test2: 0}

以前的版本:

function removeEmpty(object) {
Object.keys(object).forEach((key) => {
if (object[key] && typeof object[key] === 'object') {
removeEmpty(object[key]);
if (Object.keys(object[key]).length === 0) // <---- Check whether there
delete object[key]; // <---- no objects in current one
}
else if (object[key] == null || !object[key].length) delete object[key]
});

return object;
}

enter image description here

关于javascript - 删除具有未定义值的属性后删除空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46738674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com