我有以下数据结构。这是一个深层嵌套的对象。
从以下数据结构中,我需要找到一个对象的索引,该对象的slug为level-1.1.3
,这样我就可以知道是否提供了该slug,我必须添加该对象子数组内的项目。如果没有找到任何 slug,则在顶层添加,例如 另一个 1 B 级
对象。
我尝试了以下方法,但我没有采用有效的方法,也找不到索引,但找到了整个对象。问题是,它也会转到 else block ,因此如果我从 else block 返回 null 或其他内容,那么如果对象的级别太深,则无法找到对象中包含的 slug。
const data = [{
title: "Level 1 A",
slug: "level-1-A",
url: "url",
children: [{
expanded: true,
title: "Level 1.1",
slug: "level-1.1",
}]
},
{
title: "Another Level 1 B",
slug: "another-level-1-b",
url: "url",
children: []
},
{
title: "Level 1 C",
slug: "level-1-c",
expanded: true,
children: [{
expanded: true,
title: "Level 1.1",
slug: "level-1.1",
children: [{
title: "Level 1.1.1",
slug: "level-1.1.1",
url: "/child",
children: [{
title: "Level 1.1.2",
slug: "level-1.1.2",
url: "/",
children: [{
title: "Level 1.1.3",
slug: "level-1.1.3",
url: "/"
}]
}]
}]
}]
}
];
function findIndex(data, slug) {
var index = 0;
for (var i = 0; i < data.length; i++) {
if (data[i].slug === slug) {
console.log('found in depth', data[i]);
break;
} else if (data[i].children && data[i].children.length > 0) {
console.log('did not find in first level')
findIndex(data[i].children, slug)
} else {
console.log('did not find at all')
}
}
}
findIndex(data, slug = "level-1.1.3")
最佳答案
您可以在其中使用数组查找和递归来查找 slug (或其他任何内容):
var data = [
{
title: "Level 1 A",
slug: "level-1-A",
url: "url",
children: [
{
expanded: true,
title: "Level 1.1",
slug: "level-1.1",
}
]
},
{
title: "Another Level 1 B",
slug: "another-level-1-b",
url: "url",
children: []
},
{
title: "Level 1 C",
slug: "level-1-c",
expanded: true,
children: [
{
expanded: true,
title: "Level 1.1",
slug: "level-1.1",
children: [
{
title: "Level 1.1.1",
slug: "level-1.1.1",
url: "/child",
children: [
{
title: "Level 1.1.2",
slug: "level-1.1.2",
url: "/",
children: [
{ title: "Level 1.1.3", slug: "level-1.1.3", url: "/" }
]
}
]
}
]
}
]
}
];
function findslug(title){
var slug = "";
data.find(function f(current){
if(current.title === title){
slug = current.slug;
return current;
};
if(current.children)
return current.children.find(f);
});
return slug;
}
console.log(findslug("Level 1.1.3"));
console.log(findslug("Level 1 C"));
关于javascript - 如何查找与提供的 slug 匹配的某个对象的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52547011/