基本思路是递归,首先判断对象的类型,根据对象的类型进行不同处理

 

function myFlat(object){
    let res = {}
    let process = (key, value) => {
        //判断数据类型
       if(Object(value) !== value){
        //基本数据类型
        if(key){
            res[key] = value
        }
       }else if(Array.isArray(value)){
           //数组
           for(let i=0;i<value.length;i++){
               process(key+'['+i+']',value[i])
           }
           if (value.length === 0) {
                res[key] = [];
            }
       }else if(Object.prototype.toString.call(value)==='[object Function]'){
          //函数
           res[key] = value
       }else{
              //对象
           let objArr = Object.keys(value);
            objArr.forEach(item => {    
                process(key?`${key}.${item}`:`${item}`, value[item])
            });
            if (objArr.length === 0 && key) {
                res[key] = {};
            }
       }
    }
    process('',object)
    return res
}

 

posted on 2023-04-26 17:32  皮五辣子  阅读(189)  评论(0编辑  收藏  举报