简介
在本实验中,我们将探索如何在JavaScript中使用带键路径的对象来实现对象的扁平化。我们将使用嵌套的 Array.prototype.reduce()
和 String.prototype.split()
方法,以点号作为分隔符来拆分每个键,并根据这些键添加对象。完成本实验后,你将对如何有效地将扁平对象转换为嵌套对象有深入的理解。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在本实验中,我们将探索如何在JavaScript中使用带键路径的对象来实现对象的扁平化。我们将使用嵌套的 Array.prototype.reduce()
和 String.prototype.split()
方法,以点号作为分隔符来拆分每个键,并根据这些键添加对象。完成本实验后,你将对如何有效地将扁平对象转换为嵌套对象有深入的理解。
要在JavaScript中使用带键路径的对象来实现扁平化,可按以下步骤操作:
打开终端/SSH并输入 node
以开始练习编码。
使用嵌套的 Array.prototype.reduce()
将扁平路径转换为叶节点。
使用 String.prototype.split()
以点号作为分隔符拆分每个键,并使用 Array.prototype.reduce()
根据这些键添加对象。
如果当前累加器已经包含针对某个特定键的值,则返回其值作为下一个累加器。
否则,将适当的键值对添加到累加器对象中,并返回该值作为累加器。
以下是 unflattenObject
函数的代码:
const unflattenObject = (obj) =>
Object.keys(obj).reduce((res, k) => {
k.split(".").reduce(
(acc, e, i, keys) =>
acc[e] ||
(acc[e] = isNaN(Number(keys[i + 1]))
? keys.length - 1 === i
? obj[k]
: {}
: []),
res
);
return res;
}, {});
你可以使用 unflattenObject
函数在JavaScript中扁平化对象:
unflattenObject({ "a.b.c": 1, d: 1 }); // { a: { b: { c: 1 } }, d: 1 }
unflattenObject({ "a.b": 1, "a.c": 2, d: 3 }); // { a: { b: 1, c: 2 }, d: 3 }
unflattenObject({ "a.b.0": 8, d: 3 }); // { a: { b: [ 8 ] }, d: 3 }
恭喜你!你已完成“扁平化对象”实验。你可以在LabEx中练习更多实验以提升技能。