JavaScript 对象扁平化

2021/12/3 17:08:20

本文主要是介绍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>
  


这篇关于JavaScript 对象扁平化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程