我正在尝试循环对象中的所有属性并删除所有伪造的属性,然后返回使用delete
传入的对象。显然我做错了...这是我到目前为止写的代码。
var obj = {
a: undefined,
b: "banana",
c: 0,
d: false,
e: "",
f: "apple",
g: 23
}
var truthy = function (obj) {
for (var i in obj) {
if (obj[i] === null || obj[i] === undefined) {
delete obj[i];
}
} return obj;
}
这是实际问题: 创建一个接受对象的函数,遍历其所有属性,并删除任何伪造的东西。然后返回传入的对象。(提示:删除)
答案 0 :(得分:3)
if (!obj[i])
。假设这是你想要的,但不考虑false
“falsy”有点傻。你的实际问题是什么?
答案 1 :(得分:1)
我会做_.pickBy(obj, _.identity);
它会返回只有真值的对象
答案 2 :(得分:0)
演示:
var obj = {
a: undefined,
b: "banana",
c: 0,
d: false,
e: "",
f: "apple",
g: 23
}
var truthy = function (obj) {
for (var i in obj) {
if (!obj[i]) {
delete obj[i];
}
}
return obj;
};
console.log(truthy(obj));
因为您使用===
所以null
(''
)不等于false
,您的代码只需删除false
和undefined
的密钥
答案 3 :(得分:0)
根据MDN,falsy
表示:
” 伪值是在布尔上下文中计算时转换为false的值。
JavaScript在布尔上下文中使用类型强制。 “
if (false)
if (null)
if (undefined)
if (0)
if (NaN)
if ('')
if (document.all) [1]
因此,如果要删除所有falsy
值,请将条件更改为if (!obj[i])
,以检查虚假值并在下一行中删除。
参阅: