删除对象中的虚假值

时间:2016-02-24 02:57:20

标签: javascript object for-in-loop

我正在尝试循环对象中的所有属性并删除所有伪造的属性,然后返回使用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;
}

这是实际问题: 创建一个接受对象的函数,遍历其所有属性,并删除任何伪造的东西。然后返回传入的对象。(提示:删除)

4 个答案:

答案 0 :(得分:3)

  1. 返回对象是多余的,因为您正在修改传入的对象。如果要返回带有属性的新对象,请在函数中创建一个新对象,并将要留下的属性复制到它。
  2. 您对“falsy”的定义与JavaScript不完全一致。如果你想要与其他地方一样的“假”,只需说if (!obj[i])。假设这是你想要的,但不考虑false“falsy”有点傻。
  3. 你的实际问题是什么?

答案 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,您的代码只需删除falseundefined的密钥

答案 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]),以检查虚假值并在下一行中删除。

参阅:

  1. JsFiddle:https://jsfiddle.net/tk589h2s/
  2. 文章:https://developer.mozilla.org/en-US/docs/Glossary/Falsy