我将等级数据作为树数组:
var myData = [
{
id: 0,
title:"Item 1"
}, {
id: 1,
title:"Item 2",
subs: [
{
id: 10,
title:"Item 2-1",
subs: [
{
id: 100,
title:"Item 2-2-1"
}, {
id: 110,
title:"Item 2-2-2"
}, {
id: 120,
title:"Item 2-2-3"
}
]
}, {
id: 11,
title:"Item 2-2"
}, {
id: 12,
title:"Item 2-3"
}
]
}, {
id: 2,
title:"Item 3"
},
// more data here
];我需要在这个数组中按标题获得id。我试着使用这个函数:
console.log(myData.findIndex(item=>item.title==="Item 3"))但这对“第二条第二条”不起作用。我该如何解决这个问题?
发布于 2022-06-30 10:23:21
我创建了这个简单的findId方法,以便找到标题,并作为数据数组结构的结果返回id或undefined。
findId(title, list)函数它的目的是迭代在第二个参数中接收到的列表,查找每个元素中的标题,如果有匹配,则返回id,否则它将检查元素中是否存在subs,在这种情况下,它被递归调用为findId函数,使用元素的子元素作为列表。如果找到一个元素,则返回其id,否则迭代将继续。
--假设每个标题在数组中都是唯一的--这将很好地工作。
,否则只会找到第一个.
请看以下内容:
function findId(title, list) {
for (const _item of list) {
if (_item.title === title) {
// Return some top-level id
return _item.id;
// If the item is not the one, check if it has subs
} else if (_item?.subs) {
// Use _item.subs as a list, calling the function recursively
const subId = findId(title, _item.subs);
// Return some nested subId if found
if (subId !== undefined) return subId;
}
}
// Return undefined if not found
return undefined;
}
var myData = [
{
id: 0,
title: "Item 1"
},
{
id: 1,
title: "Item 2",
subs: [
{
id: 10,
title: "Item 2-1",
subs: [
{
id: 100,
title: "Item 2-2-1"
}, {
id: 110,
title: "Item 2-2-2"
}, {
id: 120,
title: "Item 2-2-3"
}]
}, {
id: 11,
title: "Item 2-2"
}, {
id: 12,
title: "Item 2-3"
}]
},
{
id: 2,
title: "Item 3"
},
// more data here
];
console.log("Id: ", findId("Item 2", myData));
console.log("Id: ", findId("Item 2-1", myData));
console.log("Id: ", findId("Item 2-2-2", myData));
console.log("Id: ", findId("Wrong Title", myData));console.log("Id: ", findId("Item 2", myData));<br/>
console.log("Id: ", findId("Item 2-1", myData));<br/>
console.log("Id: ", findId("Item 2-2-2", myData));<br/>
console.log("Id: ", findId("Wrong Title", myData));<br/>
最后一个按预期返回undefined,因为标题不包括在数组中。
https://stackoverflow.com/questions/72813997
复制相似问题