循环访问对象的值并删除虚假值

时间:2015-08-21 18:47:23

标签: javascript object

我正在寻找循环对象并删除被认为是“假”的值,即: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很新,任何帮助表示赞赏。

感谢。

2 个答案:

答案 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;
}
}