我正在寻找循环对象并删除被认为是“假”的值,即:false,null,0,Nan等。
到目前为止,我的代码看起来像这样:
function truthyObjLoop(user) {
var falseAnswer = undefined;
for (var key in user) {
if (user[key] === false) {
falseAnswer += user[key];
delete falseAnswer;
}
}
return user;
}
我知道它有问题,但我很难找到并解决问题。我对Javascript很新,任何帮助表示赞赏。
感谢。
答案 0 :(得分:1)
你第一次尝试时非常接近。但是,比较=== false
并不总能捕捉到" falsey"值。简单地使用!value
并检查true将查找falsey值,因为它隐式地将值转换为boolean。此时剩下的就是迭代和删除。
function truthyObjLoop(user){
for(var key in user){
if(user.hasOwnProperty(key) && !user[key]) delete user[key];
}
return user;
}
答案 1 :(得分:0)
如果你只想捕捉等于false,null,undefined或0的值...你应该使用@travis j的答案。但是,如果您还要匹配NaN值,我建议进行微调
function truthyObjLoop(user){
for(var key in user){
if(user.hasOwnProperty(key) && (!user[key] || isNaN(user[key]) )) delete user[key];
}
return user;
}
如果你可以进一步扩展它以包括空数组和空对象
function truthyObjLoop(user){
for(var key in user){
if( user.hasOwnProperty(key) && (!user[key] ||
Number.isNaN(user[key]) ||
(user[key] instanceof Array && !user[key].length) ||
(user[key] instanceof Array ==false && user[key] instanceof String == false && !Number.isInteger(user[key]) && !Object.keys(user[key]).length) ))
delete user[key];
}
return user;
}
}