【问题标题】:One liner to remove JS object properties with empty string [duplicate]使用空字符串删除 JS 对象属性的一种衬里 [重复]
【发布时间】:2020-08-28 09:08:27
【问题描述】:

我这里有一个 JS 对象

 {
    "test1" : "",
    "test2" : "apple",
    "test3" : "oranges",
    "test5" : ""
  }

有没有可以过滤掉所有带空字符串的属性的JS one-liner?

预期结果:

 {
    "test2" : "apple",
    "test3" : "oranges",
  }

【问题讨论】:

  • 为什么它需要多少行?
  • 我一直在寻找比我目前的解决方案更优雅的解决方案,并且我能够从社区中找到一个非常好的解决方案。谢谢!

标签: javascript


【解决方案1】:

你可以这样做sn-p:

const foo 

const bar = Object.fromEntries(Object.entries(foo).filter(value => value[1]))

在 bar 中,您有过滤后的对象。

要理解这一点,我们可以分为三个步骤:

  • 通过 Object.entries(foo) 我们得到了一个 foo 条目的列表。每个条目是一个包含两个值的数组,第一个是键,第二个是值。

  • 使用过滤器,我们在索引为 1 的条目数组中获取所有条目(值)并过滤是否有值。空字符串被认为是假值,因此使用 value[1] 就足够了。

  • 最后,我们使用 Object.fromEntries 获得过滤后的条目,并用这些条目构造一个对象。如果 foo 中有空字符串,则过滤后键值组合不在 fromEntries 参数中。

【讨论】:

  • 太棒了。就是这样!今天你教我Object.fromEntries()的存在;)
【解决方案2】:

试试这个。它将从您的原始对象中删除所有空属性。

const x = {
    "test1" : "",
    "test2" : "apple",
    "test3" : "oranges",
    "test5" : ""
};
Object.keys(x).filter(k => x[k] === '').map(k => delete x[k]);
console.log(x);

【讨论】:

  • 谢谢董,有没有办法让Object.keys(x).filter(k => x[k] === '').map(k => delete x[k]); 这一行过滤器也返回最终对象?
  • 看来你的答案是对的 :)
【解决方案3】:

您可以使用Object.fromEntries 重建一个新的过滤对象:

var obj = {
  "test1": "",
  "test2": "apple",
  "test3": "oranges",
  "test5": ""
};

obj = Object.fromEntries(Object.keys(obj).filter(k => obj[k] !== '').map(k => [k, obj[k]]));

console.log(obj);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2021-11-22
    • 2017-05-08
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    相关资源
    最近更新 更多