2020-07-16
描述
使用路径做为键,将对象进行展开。
提示
- 使用递归
- 对
Object.keys(obj)
使用Array.prototype.reduce()
,以便将每一个叶子节点转换为展开的路径节点 - 如果一个键的值为对象,函数将进行自身调用,使用适当的
prefix
通过Object.assign()
来创建路径 - 如果一个键的值不为对象,将通过累加器对象为键值对添加适当的前缀
- 第二个参数
prefix
可以为每一个键设置前缀,其默认值为空
代码
const flattenObject = (obj, prefix = '') =>
Object.keys(obj).reduce((acc, k) => {
const pre = prefix.length ? prefix + '.' : '';
if (typeof obj[k] === 'object') Object.assign(acc, flattenObject(obj[k], pre + k));
else acc[pre + k] = obj[k];
return acc;
}, {});
示例
平铺下列对象:
flattenObject({ a: { b: { c: 1 } }, d: 1 }); // {a.b.c: 1, d: 1}