Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何找到与提供的slug匹配的特定对象的索引_Javascript_Data Structures - Fatal编程技术网

Javascript 如何找到与提供的slug匹配的特定对象的索引

Javascript 如何找到与提供的slug匹配的特定对象的索引,javascript,data-structures,Javascript,Data Structures,我有以下数据结构。这是一个嵌套很深的对象 从下面的数据结构中,我需要找到一个对象的索引,该对象的slug为level-1.1.3,这样我就可以知道如果提供了slug,我必须在该对象子数组中添加项。如果未找到任何slug,则在顶层添加,如另一个级别1b对象 我尝试了以下方法,但我没有用有效的方法,也找不到索引,但找到了整个对象。问题是,它也会转到else块,因此如果我从else块返回null或其他内容,那么如果对象中包含的slug处于太深的级别,则无法找到它 const数据=[{ 标题:“一级A

我有以下数据结构。这是一个嵌套很深的对象

从下面的数据结构中,我需要找到一个对象的索引,该对象的slug为
level-1.1.3
,这样我就可以知道如果提供了slug,我必须在该对象子数组中添加项。如果未找到任何slug,则在顶层添加,如
另一个级别1b
对象

我尝试了以下方法,但我没有用有效的方法,也找不到索引,但找到了整个对象。问题是,它也会转到else块,因此如果我从else块返回null或其他内容,那么如果对象中包含的slug处于太深的级别,则无法找到它

const数据=[{
标题:“一级A”,
鼻涕虫:“一级甲级”,
url:“url”,
儿童:[{
对,,
标题:“1.1级”,
鼻涕虫:“1.1级”,
}]
},
{
标题:“另一个1级B”,
鼻涕虫:“另一级-1-b”,
url:“url”,
儿童:[]
},
{
标题:“1级C”,
鼻涕虫:“1-c级”,
对,,
儿童:[{
对,,
标题:“1.1级”,
鼻涕虫:“1.1级”,
儿童:[{
标题:“1.1.1级”,
鼻涕虫:“1.1.1级”,
url:“/child”,
儿童:[{
标题:“1.1.2级”,
鼻涕虫:“1.1.2级”,
网址:“/”,
儿童:[{
标题:“1.1.3级”,
鼻涕虫:“1.1.3级”,
网址:“/”
}]
}]
}]
}]
}
];
函数findIndex(数据,slug){
var指数=0;
对于(变量i=0;i0){
console.log('在第一级中未找到')
findIndex(数据[i]。子对象,slug)
}否则{
console.log('根本找不到')
}
}
}

findIndex(data,slug=“level-1.1.3”)
您可以在其中使用数组find和recursive来查找slug(或其他任何内容):

var数据=[
{
标题:“一级A”,
鼻涕虫:“一级甲级”,
url:“url”,
儿童:[
{
对,,
标题:“1.1级”,
鼻涕虫:“1.1级”,
}
]
},
{
标题:“另一个1级B”,
鼻涕虫:“另一级-1-b”,
url:“url”,
儿童:[]
},
{
标题:“1级C”,
鼻涕虫:“1-c级”,
对,,
儿童:[
{
对,,
标题:“1.1级”,
鼻涕虫:“1.1级”,
儿童:[
{
标题:“1.1.1级”,
鼻涕虫:“1.1.1级”,
url:“/child”,
儿童:[
{
标题:“1.1.2级”,
鼻涕虫:“1.1.2级”,
网址:“/”,
儿童:[
{标题:“1.1.3级”,slug:“1.1.3级”,url:“/”}
]
}
]
}
]
}
]
}
];
函数findslug(标题){
var slug=“”;
数据查找(函数f(当前){
if(current.title==标题){
slug=当前的.slug;
回流;
};
if(当前的子项)
返回当前.children.find(f);
});
回流段塞;
}
console.log(findslug(“1.1.3级”);

console.log(findslug(“1c级”)感谢您提供的输入和您的尝试。您是否也能够为
“level-1.1.3”
参数提供预期输出?你的描述“我必须在该对象子数组中添加项。如果没有找到任何slug,则在顶层添加,就像另一个1b级对象一样。”对我来说没有任何意义。您正在向子数组添加哪些项?添加到顶层会是什么样子?为了清楚地理解我的用例,下面是我正在尝试开发的一个。。当您单击,比如说
1级A
项目时,您将看到添加按钮,单击该按钮时,将为您提供一个输入字段以输入值,提交后,该值将添加到
1级A
子数组中。这就是我想要实现的目标。目前,对于第一个级别,它可以正常工作,但对于嵌套级别,它不能正常工作。我希望您能理解。@ggorlen您理解用例了吗?这个概念类似于在我们的浏览器(chrome)书签中添加文件夹,单击“更多”按钮后会显示。谢谢,但我更希望看到您想要创建的确切数据结构。不幸的是,当我单击“add item exactly here”时,您的代码会无限循环,因此示例没有太大帮助。我没有找到slug,但我想从slug中找到它在数组中的位置,以便我可以在其子元素中添加项。我的意思是,如果我用slug
level-1.1.3
找到对象的位置,那么我可以将该项添加到该对象子数组中。这就是我所期望的。是的,您可以重用此代码,并在匹配的位置添加对象(在
if(current.title==title){//add code add object here…};