const obj = {
"a": {
"b": {
"c": {
"d": 1
}
},
},
"aa": 2,
"c": [
1,
2
]
}
// 输出
// { 'a.b.c.d': 1, aa: 2, 'c[0]': 1, 'c[1]': 2 }
const isObj = data => Object.prototype.toString.call(data) === '[object Object]'
const flatObject = (obj, prefix = '') => {
return Object.entries(obj).reduce((pre, cur) => {
const key = !prefix ? cur[0] : isObj(obj) ? `${prefix}.${cur[0]}` : `${prefix}[${cur[0]}]`
if (!isObj(cur[1]) && !Array.isArray(cur[1])) {
return {
...pre,
[key]: cur[1],
}
}
return {
...pre,
...flatObject(cur[1], key)
}
}, {})
}
flatObject(obj)