Javascript 试图从对象中删除false属性
我正在尝试删除计算结果不为true的对象属性。我做错了什么Javascript 试图从对象中删除false属性,javascript,Javascript,我正在尝试删除计算结果不为true的对象属性。我做错了什么 var object = { obj1: NaN, obj2: false, obj3: "Don't delete", obj4: "Please don't delete" }; var onlyTruthy = function(object) { for (var key in object) { if (object[key] === false) { delete object[k
var object = {
obj1: NaN,
obj2: false,
obj3: "Don't delete",
obj4: "Please don't delete"
};
var onlyTruthy = function(object) {
for (var key in object) {
if (object[key] === false) {
delete object[key];
}
}
return(object)
};
要删除所有属性,只需检查值即可
if (!object[key]) {
delete object[key];
}
通过检查对象[key]==false
,您可以执行与false
的严格比较。这意味着,将对照类型(布尔值)和相同的值检查该值。但你需要的是——有点少。只是检查一个不真实的值
请记住,值为0
的属性也将被删除
工作代码:
var object={obj1:NaN,obj2:false,obj3:“不要删除”,obj4:“请不要删除”},
onlyTruthy=函数(对象){
for(对象中的变量键){
如果(!对象[键]){
删除对象[键];
}
}
返回对象;
};
只有残忍(客体);
console.log(对象)代码>要删除所有属性,只需检查值即可
if (!object[key]) {
delete object[key];
}
通过检查对象[key]==false
,您可以执行与false
的严格比较。这意味着,将对照类型(布尔值)和相同的值检查该值。但你需要的是——有点少。只是检查一个不真实的值
请记住,值为0
的属性也将被删除
工作代码:
var object={obj1:NaN,obj2:false,obj3:“不要删除”,obj4:“请不要删除”},
onlyTruthy=函数(对象){
for(对象中的变量键){
如果(!对象[键]){
删除对象[键];
}
}
返回对象;
};
只有残忍(客体);
console.log(对象)代码>仅使用if(!object[key])表示真值,而不与精确的伪值进行比较。仅使用if(!object[key])表示真值,而不与精确的伪值进行比较
我正在尝试删除计算结果不为true的对象属性。我做错了什么
var object = {
obj1: NaN,
obj2: false,
obj3: "Don't delete",
obj4: "Please don't delete"
};
var onlyTruthy = function(object) {
for (var key in object) {
if (object[key] === false) {
delete object[key];
}
}
return(object)
};
问题是,您正在使用而不是。当你问程序“这两件事是一样的吗?”时,你不允许它做任何形式的欺骗
以下是一些例子:
1 == 1 // true
"1" == 1 // true
1 == '1' // true
0 == false // true
0 == null // false
0 == undefined // false
null == undefined // true
vs:
当你写…==false
,只有当变量实际等于false
时,才会“计算为true”。如果变量为null
或未定义
,则它不会“计算为true”
有关此问题的更多详细信息,请参见此问题:
仅仅将==
操作符更改为=
也不能解决问题。你将不得不更紧密地匹配问题定义,并检查事情是否评估为不正确
这种“计算结果为真”的概念在JS中非常常见,以至于他们将其直接构建到流控制语句中,如和:
如果将此与结合使用,则可以使用相同的“计算结果为true”检查来查找计算结果不为true的内容:
if (!object[key]) {
delete object[key];
}
这是用Javascript做事情的“正确”方法(至少是这样)
我正在尝试删除计算结果不为true的对象属性。我做错了什么
var object = {
obj1: NaN,
obj2: false,
obj3: "Don't delete",
obj4: "Please don't delete"
};
var onlyTruthy = function(object) {
for (var key in object) {
if (object[key] === false) {
delete object[key];
}
}
return(object)
};
问题是,您正在使用而不是。当你问程序“这两件事是一样的吗?”时,你不允许它做任何形式的欺骗
以下是一些例子:
1 == 1 // true
"1" == 1 // true
1 == '1' // true
0 == false // true
0 == null // false
0 == undefined // false
null == undefined // true
vs:
当你写…==false
,只有当变量实际等于false
时,才会“计算为true”。如果变量为null
或未定义
,则它不会“计算为true”
有关此问题的更多详细信息,请参见此问题:
仅仅将==
操作符更改为=
也不能解决问题。你将不得不更紧密地匹配问题定义,并检查事情是否评估为不正确
这种“计算结果为真”的概念在JS中非常常见,以至于他们将其直接构建到流控制语句中,如和:
如果将此与结合使用,则可以使用相同的“计算结果为true”检查来查找计算结果不为true的内容:
if (!object[key]) {
delete object[key];
}
这是使用Javascript(或至少是Javascript)进行操作的“正确”方法。由于以上讨论,如果只是想过滤不需要的属性,而不介意使用新变量,这将是一个很好的答案:
var object={obj1:NaN,obj2:false,obj3:“不要删除”,obj4:“请不要删除”},
结果={};
Object.keys(Object.forEach)(k=>Object[k]&&(result[k]=Object[k]);
控制台日志(结果)代码>由于以上讨论,如果只是想过滤不需要的属性,而不介意使用新变量,这将是一个很好的答案:
var object={obj1:NaN,obj2:false,obj3:“不要删除”,obj4:“请不要删除”},
结果={};
Object.keys(Object.forEach)(k=>Object[k]&&(result[k]=Object[k]);
控制台日志(结果)
是否应该删除带有NaN
的属性?您使用的是===false
,它只检查false布尔值,而不检查任何被评估为false的内容。试试!对象[键]
。另外,您最好使用Object.keys
。当您传入名为Object
的变量时,该函数的预期结果是什么?请将该信息添加到问题中。示例对象的属性中没有一个“计算为true”。但是其中有两个是“truthy”。是否应该删除带有NaN
的属性?您正在使用==false
,它将只检查false布尔值,而不检查任何被评估为false的内容。试试!对象[键]
。另外,您最好使用Object.keys
。当您传入名为Object
的变量时,该函数的预期结果是什么?请将该信息添加到问题中。示例对象的任何属性都不会“计算为tru”