基本思路是递归,首先判断对象的类型,根据对象的类型进行不同处理
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 }