删除对象中的虚假值
Remove falsy values in object
我正在尝试循环一个对象中的所有属性并删除所有虚假的内容,然后 return 使用 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;
}
这是实际问题:
创建一个函数,它接受一个对象,遍历它的所有属性,并删除任何虚假的。然后return传入的对象。(提示:删除)
- 返回对象是多余的,因为您正在修改传入的对象。如果您想 return 过滤掉属性的新对象,请在函数中创建一个新对象并复制属性你想留在里面。
- 您对 "falsy" 的定义与 JavaScript 的定义不完全一致。如果您想要与其他地方一样的 "falsy",只需说
if (!obj[i])
。假设那当然是你想要的,但不考虑 false
"falsy" 有点傻。
不过你的实际问题是什么?
此处演示:
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
和 [=16 删除键=].
根据 MDN,falsy
表示:
”
假值是在布尔上下文中计算时转换为假的值。
JavaScript 在布尔上下文中使用类型强制。
“
if (false)
if (null)
if (undefined)
if (0)
if (NaN)
if ('')
if (document.all) [1]
因此,如果您要删除所有 falsy
值,请将条件更改为 if (!obj[i])
,它会检查虚假值并在下一行中删除。
参考:
我会做 _.pickBy(obj, _.identity);
它会 return 对象只有真值
我正在尝试循环一个对象中的所有属性并删除所有虚假的内容,然后 return 使用 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;
}
这是实际问题: 创建一个函数,它接受一个对象,遍历它的所有属性,并删除任何虚假的。然后return传入的对象。(提示:删除)
- 返回对象是多余的,因为您正在修改传入的对象。如果您想 return 过滤掉属性的新对象,请在函数中创建一个新对象并复制属性你想留在里面。
- 您对 "falsy" 的定义与 JavaScript 的定义不完全一致。如果您想要与其他地方一样的 "falsy",只需说
if (!obj[i])
。假设那当然是你想要的,但不考虑false
"falsy" 有点傻。
不过你的实际问题是什么?
此处演示:
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
和 [=16 删除键=].
根据 MDN,falsy
表示:
” 假值是在布尔上下文中计算时转换为假的值。
JavaScript 在布尔上下文中使用类型强制。 “
if (false)
if (null)
if (undefined)
if (0)
if (NaN)
if ('')
if (document.all) [1]
因此,如果您要删除所有 falsy
值,请将条件更改为 if (!obj[i])
,它会检查虚假值并在下一行中删除。
参考:
我会做 _.pickBy(obj, _.identity);
它会 return 对象只有真值