function flatten(obj) {
let ans = {}
const getKey = function(obj, key = undefined) {
const keys = Array.isArray(obj) ? obj : Object.keys(obj)
for(let i = 0; i < keys.length; i++) {
if ((obj[keys[i]] || obj[i])&& (typeof obj[keys[i]] == 'object' || typeof obj[i] == 'object')) {
if(!Array.isArray(obj)) {
getKey(obj[keys[i]], key ? `${key}.${keys[i]}` : keys[i])
} else {
getKey(keys[i], key ? `${key}[${i}]` : keys[i])
}
} else if((obj[keys[i]] || obj[i]) && (typeof obj[keys[i]] !== 'object' || typeof obj[i] !== 'object')) {
if(!Array.isArray(obj)) {
if (key) {
ans[`${key}.${keys[i]}`] = obj[keys[i]]
} else {
ans[keys[i]] = obj[keys[i]]
}
} else {
ans[`${key}[${i}]`] = obj[i]
}
}
}
}
getKey(obj)
return ans
}
const obj = {
a: {
b: 1,
c: 2,
d: {
e: 5
}
},
b: [1, 3, {a: 2, b: 3, c: [1, {z: '111'}]}],
c: 3,
}
console.log(JSON.stringify(flatten(obj)))