我有一个“老年痴呆”,并且在尝试使用Javascript编写递归方法时遇到了困难。
这里有类似的问题,但是我到目前为止没看到任何可以帮助我的解决方案。
话虽如此,如果确实有重复的问题,我将删除这个问题。
给定以下对象数组:
var collection = [
{
id: 1,
name: "Parent 1",
children: [
{ id: 11, name: "Child 1", children: [] },
{ id: 12, name: "Child 2", children: [] }
]
},
{
id: 2,
name: "Parent 2",
children: [
{
id: 20,
name: "Child 1",
children: [
{ id: 21, name: "Grand Child 1", children: [] },
{ id: 22, name: "Grand Child 2", children: [] }
]
}
]
},
{
id: 3,
name: "Parent 3",
children: [
{ id: 31, name: "Child 1", children: [] },
{ id: 32, name: "Child 2", children: [] }
]
},
];
我曾经尝试过几种方法,但是我的方法似乎在经过一个层级后就会提前返回。最新的尝试如下:请有人指点正确的方向。
function findType(col, id) {
for (i = 0; i < col.length; i++) {
if (col[i].id == id) {
return col[i];
}
if (col[i].children.length > 0) {
return findType(col[i].children, id);
}
}
return null;
}
我正在尝试查找一个与给定的
id
匹配的对象,因此查找id 1
应该返回名称为Parent 1
的整个对象。如果查找id 31
,则应该返回具有id 31
和名称Child 1
的整个对象。var t = findType(collection, 1);
或者
var t = findType(collection, 31);
注意: 我希望使用纯 JavaScript 解决方案,而不是插件或其他库。虽然它们可能更稳定,但对于学习曲线并没有帮助。谢谢。