如何递归转换JavaScript对象及嵌套对象,移除edges和nodes
递归移除嵌套JavaScript对象中的
edges和nodes结构 针对嵌套对象的结构转换需求,我们可以写一个递归函数处理所有层级的edges/nodes结构,直接将其转换为实际数据的数组,替代原嵌套格式。
递归实现函数
function removeEdgesAndNodesRecursive(item) { // 处理数组:遍历每个元素递归转换 if (Array.isArray(item)) { return item.map(removeEdgesAndNodesRecursive); } // 处理对象:先判断是否是edges结构 if (typeof item === 'object' && item !== null) { // 如果当前对象包含edges,提取node数组并递归处理每个node if ('edges' in item) { return item.edges.map(edge => removeEdgesAndNodesRecursive(edge?.node)); } // 普通对象:遍历所有属性,递归处理属性值 const result = {}; for (const key in item) { if (Object.prototype.hasOwnProperty.call(item, key)) { result[key] = removeEdgesAndNodesRecursive(item[key]); } } return result; } // 基本类型直接返回 return item; }
使用示例
针对你给出的深层嵌套数据:
const data = { products: { edges: [ { node: { title: 'x', collections: { edges: [ { node: { title: 'x - collection', products: { edges: [ { node: { title: 'product in x collection' } } ] } } } ] } } } ] } }; // 调用函数处理 const transformedData = removeEdgesAndNodesRecursive(data.products); console.log(transformedData);
输出结果
[ { title: 'x', collections: [ { title: 'x - collection', products: [ { title: 'product in x collection' } ] } ] } ]
函数逻辑说明
- 数组处理:对数组中的每一项递归转换,保证嵌套数组也能被处理
- edges结构判断:只要对象包含
edges属性,就自动提取其中的node组成数组,再递归处理每个node内部的结构 - 普通对象处理:遍历对象的所有自有属性,对每个属性值递归转换,保留原有的键名和非列表结构
- 基本类型(字符串、数字等)直接返回,不做修改
这个函数可以处理任意深度的嵌套结构,完全适配你描述的固定数据模式。
内容的提问来源于stack exchange,提问作者dbzx10299
相关产品推荐
相关产品推荐

