这个函数将从对象及其嵌套子对象中移除所有假值,如 null
、undefined
、0
、''
、false
。
允许传递自定义的 falsyValues
来移除,并返回一个不包含假值的新对象。
function removeFalsy(obj, falsyValues = ['', null, undefined]) {
if (!obj || typeof obj !== 'object') {
return obj
}
return Object.entries(obj).reduce((a, c) => {
let [k, v] = c
if (falsyValues.indexOf(v) === -1 && JSON.stringify(removeFalsy(v, falsyValues)) !== '{}') {
a[k] = typeof v === 'object' && !Array.isArray(v) ? removeFalsy(v, falsyValues) : v
}
return a
}, {})
}
使用示例
let obj = {
a: 1,
b: 0,
c: '',
d: null,
e: undefined,
f: false,
g: {
a: 1,
b: 0,
c: '',
d: null,
e: undefined,
f: false,
},
j: {},
h: [],
i: [1],
}
console.log(removeFalsy(obj, [0, false, '', null, undefined]))
// 👉 { a: 1, g: { a: 1 }, i: [ 1 ] }
编码愉快