我正在使用此功能删除对象的未定义属性:
function removeUndefinedFromObject(obj) {
let foundNullProperty = false;
if (!obj) return obj;
Object.keys(obj).forEach((key) => {
if (obj[key] && typeof obj[key] === "object") {
foundNullProperty = foundNullProperty || this.removeUndefinedFromObject(obj[key]);
} else if (obj[key] == null) {
foundNullProperty = true;
delete obj[key];
}
});
return foundNullProperty;
}
removeUndefinedFromObject(myObjWithNullValues)
我希望所有null属性都将被删除。但是,函数调用前后的myObjWithNullValues
值是相同的。
因此,我必须使用符合我想要的版本:
function removeUndefinedFromObject(obj) {
let foundNullProperty = false;
if (!obj) return obj;
Object.keys(obj).forEach((key) => {
if (obj[key] && typeof obj[key] === "object") {
foundNullProperty = foundNullProperty || this.removeUndefinedFromObject(obj[key]);
} else if (obj[key] == null) {
foundNullProperty = true;
delete obj[key];
}
});
return obj;
}
myObjWithNullValues = removeUndefinedFromObject(myObjWithNullValues)
我的问题是为什么第一个不起作用? obj
的所有值都不应通过引用传递吗?
修改
我将功能改进为:
removeBadValuesFromObject(obj) {
if (!obj || typeof obj !== "object") {
return obj;
}
Object.keys(obj).forEach((key) => {
if (obj[key] !== null && typeof obj[key] === "object") {
this.removeUndefinedFromObject(obj[key]);
} else if (obj[key] === null || obj[key] === undefined || isNaN(obj[key])) {
delete obj[key];
}
});
return obj;
}