如何使用lodash做深_.omitby

时间:2019-03-13 16:10:52

标签: javascript lodash

我的代码:

s-t
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)

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

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

1 个答案:

答案 0 :(得分:0)

这是不使用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))