Javascript 如何调整此代码,使其只返回null、未定义或空值
对nodeJS来说是全新的,所以请容忍我 我需要一些关于我试图创建的功能的帮助,基本上我试图使用过滤器从对象返回所有空的、空的或未定义的值,但不确定如何执行 这是我在网上找到的一些代码,它显示了如何删除空值,但不是删除,我希望它显示所有空值、未定义值或空值(包括键和值) 代码如下:Javascript 如何调整此代码,使其只返回null、未定义或空值,javascript,arrays,node.js,null,return,Javascript,Arrays,Node.js,Null,Return,对nodeJS来说是全新的,所以请容忍我 我需要一些关于我试图创建的功能的帮助,基本上我试图使用过滤器从对象返回所有空的、空的或未定义的值,但不确定如何执行 这是我在网上找到的一些代码,它显示了如何删除空值,但不是删除,我希望它显示所有空值、未定义值或空值(包括键和值) 代码如下: const myObj = { a: 1, b:'foo', c: '', d: null, e: undefined, f: {v: 1, w:'foo', x: '', y: 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));
非常感谢您的帮助
感谢阅读我不确定您的代码片段是从哪里来的,但它似乎没有以任何方式修改对象。下面的内容应该有用,希望能帮助你理解它。由于对象是通过引用传递的,因此我们可以对任何属性进行递归,该属性是处理嵌套情况的对象
constmyobj={
答:1,,
b:“foo”,
c:“,
d:空,
e:未定义,
f:{v:1,w:'foo',x:'',y:null,z:undefined,m:{a:'asd'}
};
常量removempty=(obj)=>{
对象的每个属性的Object.keys(obj.forEach)(k=>{//)
if(obj[k]==null){
delete obj[k];//null的特殊情况,因为typeof null返回“object”:-(
}else if(typeof obj[k]=='object'){//如果属性是对象
removempty(obj[k]);//递归
}else if(!obj[k]){//if属性为false(未定义,“,0)
delete obj[k];//将其从对象中删除
}
});
返回obj;
};
log(removempty(myObj));
我会编写一个函数,递归地遍历对象的所有值并删除不需要的值。在我们的例子中,我们不需要有效值
我脑子里有以下代码
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);
这将显示该对象中的未定义值或空值,这是您所需要的,对吗?除非我读错了问题。这是一个很好的答案,感谢它确实帮助我理解。但是,与其删除空值、未定义值或空值,我希望它在日志中显示这些值,以便我可以看到哪些值是empty,null或未定义。我将如何调整您的代码以实现此目标?提前感谢。两个非常好的答案,非常详细。非常感谢先生。除非您解释您的答案以及它是函数的更好版本,否则它可能会被否决或删除。您必须提供一点上下文和格式良好的代码。Welcome到堆栈溢出。感谢回答问题。谢谢,将更新代码并提供我的解释。
for (const key in myObj) if ([null, undefined].includes(myObj[key])) console.log(`myObj[${key}] is ${myObj[key]}`);