编辑代码

// The TestCase is shown below
// Input : 1 2
// Output : 3
function flatten(obj) {
	let ans = {}
	const getKey = function(obj, key = undefined) {
		// 对象情况 数组情况
		// 需要获取array下标
		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)) {
					// 需要处理key
					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)))