如何为嵌套JavaScript对象添加引用来源属性from
为对象添加引用来源
from属性的解决方案 问题分析
需要为obj下的每个顶层对象(如o1、o2、o5)添加from属性,存储所有通过字段type.id引用该对象的字段ID。核心是先收集所有引用关系,再批量为目标对象赋值。
原生JavaScript实现代码
const data = { obj: { o1: { id: "o1", name: "o1", fields: { f1: { id: "o1:f1", type: { id: "o5" } }, f2: { id: "o1:f2", type: { id: "o2" } }, }, }, o2: { id: "o2", name: "o2", fields: { f1: { id: "o2:f1", type: { id: "o5" } } }, }, o5: { id: "o5", name: "o5" }, }, }; // 收集引用关系:键为被引用对象ID,值为对应字段ID数组 const referenceMap = {}; Object.values(data.obj).forEach(parent => { if (parent.fields) { Object.values(parent.fields).forEach(field => { const refId = field.type.id; if (!referenceMap[refId]) { referenceMap[refId] = []; } referenceMap[refId].push(field.id); }); } }); // 为目标对象添加from属性 Object.entries(referenceMap).forEach(([id, fieldIds]) => { if (data.obj[id]) { data.obj[id].from = fieldIds; } }); console.log(data);
代码说明
- 收集引用关系:遍历所有带有
fields的顶层对象,提取每个字段的type.id(被引用对象ID),将当前字段ID存入对应ID的数组中,形成引用映射表。 - 赋值from属性:遍历引用映射表,找到
obj中对应ID的对象,直接为其添加from属性,值为收集到的字段ID数组。
这个方案无需依赖第三方库,逻辑直观,能高效处理给定的对象结构。
内容的提问来源于stack exchange,提问作者Ste
相关产品推荐
相关产品推荐

