【问题标题】:How to do deep _.omitby using lodash [duplicate]如何使用 lodash 进行深度 _.omit [重复]
【发布时间】:2019-03-13 16:10:52
【问题描述】:

我的代码:

let obj = {
  x: {
    a: false,
    b: 2,
    c: ''
  },
  y: ''
}

let result = _.omitBy(obj, (value, key) => {
  if (value === null || value === undefined || value === '') {
    return key;
  }
});

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

输出:{ x: { a: false, b:2, c:''}}

预期结果:{x: {a: false, b:2}}

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    这是一个不使用 lodash 的解决方案。您可以获得对象的Object.entries()filter 所有具有falsy 值的项目。然后使用reduce 将过滤后的entries 转换回对象。如果valueobject,则递归调用removeFalsy 函数以删除嵌套对象中的虚假值。这适用于任何级别的嵌套

    function removeFalsy(obj) {
      if (typeof obj === "object")
        return Object.entries(obj)
                      .filter(([k, v]) => ![undefined, null, ''].includes(v))
                      .reduce((r, [key, value]) => ({ ...r, [key]: removeFalsy(value) }), {})
      else
        return obj
    }
    
    let obj = {
      x: {
        a: false,
        b: 2,
        c: null
      },
      y: ''
    }
    
    console.log(removeFalsy(obj))

    【讨论】:

    • 我不想删除带有假值的键
    • @rudani.c 现在它只过滤掉undefinednull''
    • 谢谢。但是,我正在使用 ES5,并且在类型“ObjectConstructor”错误中获取属性“条目”不存在。我想我需要寻找另一种方式
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 2016-04-11
    • 2015-10-19
    • 2021-11-26
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多