本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述:
请使用 JavaScript 实现名为 flatten(input) 的函数,可以将传入的 input 对象(Object 或者 Array)进行扁平化处理
const input = {
a: 1,
b: [1, 2, { c: true }, [3]],
d: { e: 2, f: 3 },
g: null,
};
function flatten(input) {
}
flatten(input);
// 返回
{
"a": 1,
'b[0]': 1,
'b[1]': 2,
'b[2].c': true,
'b[3][0]': 3,
'd.e': 2,
'd.f': 3,
};
二、思路分析:
递归思想,一个复杂的对象,可能是数组,可能是对象,也可能是其它无嵌套结构的值,需要用递归方法到无深层嵌套的一层把值赋给返回的对象,递归时需要保存key值
三、AC 代码:
function flatten(obj, key = '', res = {}, isArray = false) {
for (let [k, v] of Object.entries(obj)) {
if (v) {
if (Array.isArray(v)) {
let tmp = isArray ? `${key}[${k}]` : `${key}${k}`;
flatten(v, tmp, res, true);
} else if (typeof v === 'object') {
let tmp = isArray ? `${key}[${k}].` : `${key}${k}.`;
flatten(v, tmp, res);
} else {
let tmp = isArray ? `${key}[${k}]` : `${key}${k}`;
res[tmp] = v;
}
}
}
return res;
}
四、总结:
试着参加掘金活动打个卡;