Javascript 反向遍历层次结构
我有一个包含父ID的对象层次结构。在解析json对象时,我将parentId添加到子对象中,如下所示Javascript 反向遍历层次结构,javascript,arrays,typescript,ecmascript-5,Javascript,Arrays,Typescript,Ecmascript 5,我有一个包含父ID的对象层次结构。在解析json对象时,我将parentId添加到子对象中,如下所示 public static fromJson(json: any): Ancestry | Ancestry[] { if (Array.isArray(json)) { return json.map(Ancestry.fromJson) as Ancestry[]; } const result = new Ancestry(); const
public static fromJson(json: any): Ancestry | Ancestry[] {
if (Array.isArray(json)) {
return json.map(Ancestry.fromJson) as Ancestry[];
}
const result = new Ancestry();
const { parents } = json;
parents.forEach(parent => {
parent.parentId = json.id;
});
json.parents = Parent.fromJson(parents);
Object.assign(result, json);
return result;
}
如果我有孙子,你有没有想过如何把祖先拉出来
数据在mockaroo curl()上
例如,使用下面的json和grant.id=5
,我将使用下面的id创建和数组
['5','0723','133','1']
也许有很多方法可以解决这个问题,但在我看来,最简单的方法是在数据结构中进行搜索,并按与查找时相反的顺序存储ID。这样,输出就是您所追求的 您也可以颠倒不同方法的顺序 我想指出,json结构有点奇怪。我希望它只包含嵌套的
子数组
而不将它们重命名为父数组
,子数组
,以及孙子数组
let数据=[{
“id”:“1”,
“名称”:“鹿,斑点”,
“父母”:[
{
“id”:“133”,
“姓名”:“詹姆·科尔德里克”,
“儿童”:[
{
“id”:“0723”,
“姓名”:“Ardys Kurten”,
“孙子女”:[
{
“id”:“384”,
“姓名”:“Madelle Bauman”
},
{
“id”:“0576”,
“名称”:“Pincas Maas”
},
{
“id”:“5”,
“名称”:“Corrie Beacock”
}
]
}]
}]
}]
const expectedResults=['5','0723','133','1']
函数遍历InverseResults(inputId,childArray){
if(!childArray){return}
for(子数组的常量父级){
if(parent.id==inputId){
return[parent.id]
}否则{
让res=traverseInverseResults(inputId,parent.parents | | | | | parent.children | | | parent.grandrens)//这部分有点粗糙,只是为了适应奇怪的JSON结构。
如果(res){
res.push(parent.id)
返回res
}
}
}
返回
}
let result=traverseInverseResults('5',数据)
console.log('results',result)
console.log('Got expected results?',expectedResults.length===result.length&&expectedResults.every(函数(值,索引){return value===result[index]}))
json并不是真的代表我的祖先和糟糕的命名。我会接受这个答案,但是我在发布另一个问题,你可能不知道如何解决。这是新发布的问题。添加parentId
与您的问题有什么关系?
[{
"id": "1",
"name": "Deer, spotted",
"parents": [
{
"id": "133",
"name": "Jaime Coldrick",
"children": [
{
"id": "0723",
"name": "Ardys Kurten",
"grandchildren": [
{
"id": "384",
"name": "Madelle Bauman"
},
{
"id": "0576",
"name": "Pincas Maas"
},
{
"id": "5",
"name": "Corrie Beacock"
}
]
},