我试图创建一个名为 onlyTruthy 的函数,它接受一个对象,循环遍历其所有属性,并删除任何虚假的东西。然后返回传入的对象。
以下代码一直失败,我不确定我做错了什么..
var onlyTruthy = function(someObject){
for(var property in someObject){
if(someObject[property] == "false"){
delete someObject.property;
}
}
return someObject;
};
答案 0 :(得分:2)
这里有两个主要问题:
if(someObject[property] == "false"
正在检查属性是否实际上是字符串"false"
。我没有进行布尔检查或检查falsey
值。
删除该属性时,您必须执行:delete someObject[property]
,而不是delete someObject.property
。你在做什么总是试图删除一个名为"property"
的属性,而不是变量property
的实际值。
我建议您将代码更改为:
var onlyTruthy = function(someObject){
for(var property in someObject){
if(!someObject[property]){
delete someObject[property];
}
}
return someObject;
};
仅供参考,您的if (someObject[property] == "false")
正在检查该属性是否为字符串"false"
。它根本不是布尔检查。
而且,您必须将delete someObject.property
更改为delete someObject[property]
。
至于真实和虚假。在Javascript中,许多值都是假的:
undefined
null
false
NaN
""
0
因此,您不想比较if (x == false)
以检查是否存在错误。你想做的就是:
if (!x)
查看该值是否为false。
这是一个工作片段:
var someObject = {"name":"ernest","age":50,"funky":false,"foo":"bar","foo2":""};
var onlyTruthy = function(obj){
for(var property in obj){
if(!someObject[property]){
delete obj[property];
}
}
return obj;
};
document.write(JSON.stringify(onlyTruthy(someObject)));