Javascript 试图从对象中删除false属性

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

我正在尝试删除计算结果不为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)
};
要删除所有属性,只需检查值即可

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”