编程语言
首页 > 编程语言> > JavaScript 对象扁平化

JavaScript 对象扁平化

作者:互联网

    <script>
        const obj = {
            a: {
                b: 1,
                c: 2,
                d: { e: 5 },
            },
            b: [1, 3, { a: 2, b: 3 }],
            c: 3
        }
        /* 
            {   
                'a.b': 1,  
                'a.c': 2, 
                'a.d.e': 5, 
                'b[0]': 1, 
                'b[1]': 3,    
                'b[2].a': 2,   
                'b[2].b': 3  
                 c: 3  
            }
        */

        function flatObj(o) {
            if (typeof o !== 'object') throw new Error(`TypeError: need a object type but get a ${typeof o}`)

            const res = {}
            const flat = (obj, preKey = '') => {
                Object.entries(obj).forEach(([key, value]) => {
                    /* 
                        handle key
                        preKey默认是''
                        如果是递归入口 preKey有值 需要加 . 或者 [] 分割
                    */
                    let newKey = key
                    if (preKey) {
                        newKey = `${preKey}${Array.isArray(obj) ? `[${newKey}]` : `.${newKey}`}`
                    }

                    /* 
                        handle value
                        引用类型继续递归拍平
                        基本类型设置到结果对象上
                    */
                    if (value && typeof value === 'object') {
                        return flat(value, newKey)
                    }
                    res[newKey] = key
                })
            }

            flat(o)
            return res
        }
        console.log(flatObj(obj))
    </script>
  

标签:key,newKey,obj,扁平化,对象,JavaScript,value,preKey,const
来源: https://www.cnblogs.com/ltfxy/p/15638172.html