🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

JavaScript - 将对象按照节点路径逐层展开

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}

返回总目录

每天 30 秒系列之 JavaScript 代码


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步