洛笙2022 2022-06-17 21:22 采纳率: 100%
浏览 307
已结题

实现一个函数,打平 JS 对象。

对于一个 JS 对象,value 值可以是 Object 类型,因此可能会有很深的嵌套层次。现在要求把 JS 对象打平为一层,key 值使用 . 拼接,示例如下:
原始对象:

{
    x : { 
        a : 'zxc', 
        b : 'ert' 
    }, 
    y : { 
        z : 1234 
    }, 
    arr : [ 
     2,3 
    ] 
} 

打平后:

{ 
     'x.a' : 'zxc', 
     'x.b' : 'ert', 
     'y.z' : 1234, 
     'arr.0' : 2, 
     'arr.1' : 3 
} 

原始对象:

{ 
     x : { 
        y: { 
            z: 12, 
            u: 15 
        } 
     } 
} 

打平后:

{ 
     'x.y.z': 12, 
     'x.y.u': 15 
} 

要求:函数命名为 flatObj,输入原对象,返回打平后新的对象。
//obj 是原对象,fobj 是打平后的对象。
let fobj = flatObj(obj)
提示:使用递归实现,typeof 和 Array.isArray 检测数组类型。

  • 写回答

1条回答 默认 最新

  • 凌晨小街 2022-06-18 12:40
    关注

    求采纳

    
    var b = {
        x : { 
            a : 'zxc', 
            b : 'ert' 
        }, 
        y : { 
            z : 1234 
        }, 
        arr : [ 
         2,3 
        ] 
    } 
    
    function dg(obj,now_key,new_obj,is_root_property){
        var keys = Object.keys(obj)
        for(let i in keys){
            var sufflex_key = is_root_property?
                (Array.isArray(obj)?i:keys[i]):(Array.isArray(obj)?('.'+i):('.'+keys[i]))
            if(typeof(obj[keys[i]]) !== 'object'){
                new_obj[now_key+sufflex_key]=obj[keys[i]]
            }else{
                dg(obj[keys[i]],now_key+sufflex_key,new_obj,false)
            }
        }
    }
    
    new_obj = {}
    dg(b,'',new_obj,true)
    console.log(new_obj)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 6月17日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改