我正在尝试创建一个名为onlyTruthy的函数,它接收一个对象,循环遍历它的所有属性,并删除任何虚假的属性。然后返回传入的对象。
下面的代码一直在失败,我不知道我做错了什么。
var onlyTruthy = function(someObject){
for(var property in someObject){
if(someObject[property] == "false"){
delete someObject.property;
}
}
return someObject;
};发布于 2016-05-04 00:39:53
这里有两个主要问题:
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;
};FYI,您的if (someObject[property] == "false")正在检查属性是否为字符串"false"。这根本不是布尔检查。
而且,您必须将delete someObject.property更改为delete someObject[property]。
至于真理和法尔赛。在Javascript中,很多值都是假的:
undefined
null
NaN
false
'' (empty string)
0
-0
0n (BigInt(0))所以,你不想通过比较if (x == false)来检查法尔赛。你想做的就是:
if (!x)看看这个值是不是假的。
这里有一个有用的片段:
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)));
https://stackoverflow.com/questions/37016591
复制相似问题