Truthy&在Javascript中的Falsy

时间:2016-05-04 00:36:48

标签: javascript object

我试图创建一个名为 onlyTruthy 的函数,它接受一个对象,循环遍历其所有属性,并删除任何虚假的东西。然后返回传入的对象。

以下代码一直失败,我不确定我做错了什么..

var onlyTruthy = function(someObject){
  for(var property in someObject){
    if(someObject[property] == "false"){
      delete someObject.property;
    }
  }
  return someObject;
};

1 个答案:

答案 0 :(得分:2)

这里有两个主要问题:

  1. if(someObject[property] == "false"正在检查属性是否实际上是字符串"false"。我没有进行布尔检查或检查falsey值。

  2. 删除该属性时,您必须执行:delete someObject[property],而不是delete someObject.property。你在做什么总是试图删除一个名为"property"的属性,而不是变量property的实际值。

  3. 我建议您将代码更改为:

    var onlyTruthy = function(someObject){
      for(var property in someObject){
        if(!someObject[property]){
          delete someObject[property];
        }
      }
      return someObject;
    };
    

    仅供参考,您的if (someObject[property] == "false")正在检查该属性是否为字符串"false"。它根本不是布尔检查。

    而且,您必须将delete someObject.property更改为delete someObject[property]

    至于真实和虚假。在Javascript中,许多值都是假的:

    undefined
    null
    false
    NaN
    ""
    0
    

    因此,您不想比较if (x == false)以检查是否存在错误。你想做的就是:

    if (!x)
    

    查看该值是否为false。

    这是一个工作片段:

    
    
    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)));