抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

去除所有假值,貌似没啥用

function compactObject(obj) {
    // 检查传来的对象是不是数组,是数组就直接filter,不是就继续
    const data = Array.isArray(obj) ? obj.filter(Boolean) : obj
    // 将对象的key列成数组使用reduce
    return Object.keys(data).reduce((acc, cur) => {
        if (data[cur]) {
            // 当前值为真,判断当前的值是不是对象,是就继续递归
            acc[cur] = typeof data[cur] === 'object' ? compactObject(data[cur]) : data[cur]
        }
        return acc
        // 判断初始值类型
    }, data instanceof Array ? [] : {})
}

测试:

const obj = {
    foo: false,
    bar: true,
    foobar: 1,
    star: undefined,
    arr: [
        1, 0, false, '', true, null
    ]
}

console.log(JSON.stringify(compactObject(obj),null,2));
// output:
{
  "bar": true,
  "foobar": 1,
  "arr": [
    1,
    true
  ]
}

评论