nodeJS完全陌生,请耐心等待。
关于我要创建的功能,我需要一些帮助,基本上,我正在尝试使用过滤器从对象返回所有空,空或未定义的值,但不确定如何去做。
这是我在网上找到的一些代码,该代码显示如何删除空值,而不是删除,我希望它显示所有为null,未定义或为空的值(这将包括键和值)。
代码如下:
const myObj = {
a: 1,
b:'foo',
c: '',
d: null,
e: undefined,
f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
};
const removeEmpty = (obj) => {
Object.keys(obj).forEach(k =>
(obj[k] && typeof obj[k] === 'object') && removeEmpty(obj[k]) ||
(!obj[k] && obj[k] !== undefined)
);
return obj;
};
console.log(removeEmpty(myObj));
非常感谢所有帮助。
感谢阅读
答案 0 :(得分:1)
不确定您的代码片段在哪里,但是似乎并没有以任何方式修改对象。以下内容应该可以正常工作,并通过注释可以帮助您更好地理解它。由于对象是通过引用传递的,因此我们可以递归处理作为处理嵌套案例的对象的任何属性。
const myObj = {
a: 1,
b:'foo',
c: '',
d: null,
e: undefined,
f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
};
const removeEmpty = (obj) => {
Object.keys(obj).forEach(k => {//for each property of the object
if(obj[k] === null){
delete obj[k];//special case for null since typeof null returns "object" :-(
}else if(typeof obj[k] === 'object'){//if the property IS an object
removeEmpty(obj[k]);//recurse
}else if(! obj[k]){//if property is falsey (undefined, "", 0)
delete obj[k];//remove it from the object
}
});
return obj;
};
console.log(removeEmpty(myObj));
编辑
如果要获取仅包含空值的对象,则可以这样修改代码:
const myObj = {
a: 1,
b:'foo',
c: '',
d: null,
e: undefined,
f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
};
const removeNotEmpty = (obj) => {
Object.keys(obj).forEach(k => {//for each property of the object
if(typeof obj[k] === 'object' && obj[k] !== null){//if the property IS an object
removeNotEmpty(obj[k]);//recurse
}else if(obj[k]){//if property is truthy
delete obj[k];//remove it from the object
}
});
return obj;
};
console.log(removeNotEmpty(Object.assign({},myObj)));//make sure to copy the object if you don't want to modify the first (that's what the Object.assign is for)
答案 1 :(得分:0)
我将编写一个函数,该函数以递归方式遍历对象的所有值,并删除不需要的值。在我们的情况下,我们不需要有效的值。
我在记住代码
function deleteValues(myObj) {
for (let key in myObj) {
if (myObj[key]) {
if (typeof myObj[key] == 'object') {
deleteValues(myObj[key]);
} else {
delete myObj[key];
}
}
}
}
deleteValues(myObj);
答案 2 :(得分:0)
for (const key in myObj) if ([null, undefined].includes(myObj[key])) console.log(`myObj[${key}] is ${myObj[key]}`);
这将向您显示该对象中的未定义或null值,这是您所需要的全部吗?除非我看错了这个问题。