如何处理嵌套对象:合并frontmatter与fields层级结构?
实现方法
你可以通过以下几种方式合并每个node里的frontmatter和fields属性,消除嵌套层级:
方法一:使用对象展开运算符(最简洁)
利用ES6的对象展开语法,直接将两个对象的属性合并到新对象中:
const transformed = { nodes: myObject.nodes.map(node => ({ ...node.frontmatter, ...node.fields })) };
这个写法会把frontmatter的所有属性和fields的所有属性都展开到新对象里,如果两个对象有同名属性,fields里的属性会覆盖frontmatter里的(因为展开顺序靠后)。
方法二:使用Object.assign
如果需要兼容旧环境,或者更明确地展示合并逻辑,可以用Object.assign:
const transformed = { nodes: myObject.nodes.map(node => Object.assign({}, node.frontmatter, node.fields)) };
Object.assign会把后面的对象属性合并到第一个空对象里,同样,fields的属性会覆盖frontmatter中同名的属性。
额外说明
如果某个node的frontmatter或fields可能不存在(比如为null/undefined),可以加个判断避免报错:
const transformed = { nodes: myObject.nodes.map(node => ({ ...(node.frontmatter || {}), ...(node.fields || {}) })) };
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

