js对象扁平化 字符串转对象 扁平化对象转字符串

js对象的扁平化

传入一个对象 获取他扁平后的对象 如果嵌套多层已.的方式呈现

设计思路 判断当层结构是不是对象并且不是空对象 满足条件递归 链接每次递归的key存放到数组里 在最后一层进行数组的join方法生成key

        window.isobj = function isEmptyObject(elem) {
            for (var key in elem) {
                return false
            }
            return true
        }      
let aaa = {
            a: {
                b: {
                    l: 1212,
                    c: {
                        d: 6666
                    }
                }
            },
            g: {
                b: {
                    c: {
                        d: 5435,
                        h: []
                    }
                }
            },
            e: {
                x: 888
            },
            p: 999,
        }
        window.gettoobj = function gettoobj(obj, params, mykey, isgetstr) {
            if (obj.__proto__.constructor === Object && !window.isobj(obj)) {
                for (const key in obj) {
                    if (Object.hasOwnProperty.call(obj, key)) {
                        gettoobj(obj[key], params, mykey.concat(key), isgetstr)
                    }
                }
            } else {
                isgetstr?params.push(mykey.join('/')):params[mykey.join('.')] = obj
            }
            return isgetstr ? params.toString() : params
        }
        console.log(aaa)
        console.log(window.gettoobj(aaa, {}, [], false))

在这里插入图片描述

js字符串转对象

整体思路就是截取后 判断对象是否有这个key 没有就是空对象

  let str = 'a/b/c,d/e/f,g/h/i,j/k/l'
        let myobj = {}
        function getobj(str) {
            let arr = str.split(',')
            arr.map(item => {
                let list = item.split('/')
                let obj = myobj
                list.map(item => {
                    if (!obj[item]) {
                        obj[item] = {}
                    }
                    obj = obj[item]
                })
            })
            return myobj
        }
        console.log(getobj(str))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ytqQMFrf-1651328569667)(C:\Users\xiaoxinxin\AppData\Roaming\Typora\typora-user-images\1651328348923.png)]

js对象转字符串

和第一个方法一样 就写在了一起 传入的参数不一样

   window.gettoobj = function gettoobj(obj, params, mykey, isgetstr) {
            if (obj.__proto__.constructor === Object && !window.isobj(obj)) {
                for (const key in obj) {
                    if (Object.hasOwnProperty.call(obj, key)) {
                        gettoobj(obj[key], params, mykey.concat(key), isgetstr)
                    }
                }
            } else {
                isgetstr?params.push(mykey.join('/')):params[mykey.join('.')] = obj
            }
            return isgetstr ? params.toString() : params
        }
      console.log(window.gettoobj(getobj(str), [], [], true))

在这里插入图片描述


版权声明:本文为m0_56896206原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。