/*const obj = { a: { b: 1, c: 2, d: {e: 5} }, b: [1, 3, {a: 2, b: 3}], c: 3}flatten(obj) 结果返回如下// {// '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 isObject(val) { return typeof val === 'object' && val !== null;}function flatten(obj) { if (!isObject(obj)) return let result = {} // 递归方法 function dfs (cur, preFix) { if (isObject(cur)) { // 是否是数组 if (Array.isArray(cur)) { cur.forEach((item, index) => { // 注意:第二个参数格式 dfs(item, `${preFix}[${index}]`) }) } else { for (let i in cur) { // 注意:第二个参数格式 dfs(cur[i], `${preFix}${preFix ? '.' : ''}${i}`) } } } else { // result[''] = cur 就是将 cur 赋值给 result result[preFix] = cur } } dfs(obj, '') return result}flatten(obj)