我有一个对象数组。你可以在JSONBlob.com这里找到完整数据的样例。
这是一个简化的预览:
[
{
"name": "Unbetitelt",
"organizationMap": "60a55ed4e3a8973a02f910f1",
"childrenLayout": [{
"i": "60a64930cf1db1710b97bf7a",
}],
"id": "60a6472ecf1db1710b97bf4c"
},
{
"name": "middleparent",
"parentCubo": "60a6472ecf1db1710b97bf4c",
"organizationMap": "60a55ed4e3a8973a02f910f1",
"childrenLayout": [{
"i": "60a64936cf1db1710b97bf7d",
},
{
"i": "60a649afcf1db1710b97bfa6",
}
],
"id": "60a64930cf1db1710b97bf7a"
},
{
"name": "Unbetitelt",
"parentCubo": "60a64930cf1db1710b97bf7a",
"organizationMap": "60a55ed4e3a8973a02f910f1",
"childrenLayout": [
{
"i": "60a6494acf1db1710b97bf8f",
},
{
"i": "60a64976cf1db1710b97bf9a",
}
],
"id": "60a64936cf1db1710b97bf7d"
},
{
"name": "Unbetitelt",
"parentCubo": "60a64930cf1db1710b97bf7a",
"organizationMap": "60a55ed4e3a8973a02f910f1",
"childrenLayout": [],
"id": "60a649afcf1db1710b97bfa6"
},
{
"name": "Unbetitelt",
"parentCubo": "60a649c5cf1db1710b97bfb1",
"organizationMap": "60a55ed4e3a8973a02f910f1",
"childrenLayout": [],
"id": "60a649efcf1db1710b97bfc4"
}
]
这个数组中的每个对象(根数组)都有一个id和childrenLayout属性。
childrenLayout属性是一个对象数组(子数组),其中包含一个i属性,但不包含另一个childrenLayout。因此,为了找到childrenLayout数组中每个项目的子项,我们将使用这个i字段,并在根数组中查找对象。
一旦我们在根数组中找到这些对象,如果这些对象上的childrenLayout属性不是一个空数组,那么我们就必须重复相同的过程,并在该对象的childrenLayout中查找对象,从而创建与具有id x的特定对象链接的所有id列表。
因此,例如,如果我们尝试查找与id 60a6472ecf1db1710b97bf4c关联的所有项目,我们将获得以下结果:
60a64930cf1db1710b97bf7a 60a64936cf1db1710b97bf7d 60a649afcf1db1710b97bfa6 60a6494acf1db1710b97bf8f 60a64976cf1db1710b97bf9a
这是我目前的代码,显然不能按预期工作,并且仅返回上述预期项目列表中的最后三个项目:
const findChildFor = item => {
if (item.childrenLayout.length > 0) {
const detailsOfItems = item.childrenLayout.map(({ i }) =>
data.find(datum => datum.id === i)
);
return detailsOfItems.map(itemDetails => findChildFor(itemDetails));
} else {
return item.id;
}
};
const [firstItem] = data;
// TODO: Work on a way to make it return children without having to flatten it.
const childrenRelatedToFirstItem = findChildFor(firstItem);
console.log(
'childrenRelatedToFirstItem: ',
childrenRelatedToFirstItem.flat(10)
);
为了加速解决方案,这是一个带有目前代码的 Stackblitz 示例。
非常感谢任何帮助。
[...new Set(linkedChildren)]
修复了。我将使用解决方案更新此线程。 - SiddAjmera