我想创建一个方法来删除 null 和未定义的属性。
这样做:
I convert my plain object into table
loop on it
filter on attributes if there are null or undefined
但问题是我并没有用新值来重构我的对象。让我们来看看:
var req = {
adtForm1: {
firstName: 'John',
lastName: undefined,
middleName: ''
},
adtForm2: {
firstName: null,
lastName: 'Doe',
middleName: ''
}
};
removeUndefinedFormsAttributes = (somesForms) => {
const forms = Object.values(somesForms);
const formsUpdate = {};
forms.forEach(item => {
const formFields = Object.values(item);
formFieldsKeys = Object.keys(item);
const formFiltered = formFields.filter(field => { return field !== null && field !== undefined; });
console.log("formFiltered", formFiltered);
})
console.log(somesForms)
return forms;
};
removeUndefinedFormsAttributes(req)
正如我们在代码片段中看到的,formFiltered 更改了好的值,但我需要返回与 somesForms 相同的对象。 这就是我需要的:
expectedValue = {
adtForm1: {
firstName: 'John',
middleName: ''
},
adtForm2: {
lastName: 'Doe',
middleName: ''
}
}
我知道我需要使用 reduce() 函数和 keys() 函数,但我真的不知道如何使用。我将非常感谢任何帮助。
最佳答案
如果您只需要从嵌套在下一层的对象中删除具有 null
或 undefined
值的键,那么您可以使用 迭代主对象的值>Object.values
,然后使用 Object.keys
遍历每个嵌套对象的键,并删除符合条件的键。您可以测试嵌套对象的值,以确定它们是 null
还是 undefined
,例如 value == null
(请参阅 How to determine if variable is undefined or null? ).
如果您需要删除对象中不同嵌套级别的键或某些嵌套值属于不同类型的对象中的键,请查看其他一些使用递归和类型检查的答案。
例如:
const req = { adtForm1: { firstName: 'John', lastName: undefined, middleName: '' }, adtForm2: { firstName: null, lastName: 'Doe', middleName: '' } };
Object.values(req).forEach((v) => {
Object.keys(v).forEach((k) => {
if (v[k] == null) {
delete v[k];
}
});
});
console.log(req);
// {"adtForm1":{"firstName":"John","middleName":""},"adtForm2":{"lastName":"Doe","middleName":""}}
关于javascript - 删除对象中的空或未定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55520988/