Javascript在嵌套数组中使用find
我有以下数组数据Javascript在嵌套数组中使用find,javascript,arrays,Javascript,Arrays,我有以下数组数据 var data = [ {name:'hr', to:'/hr/settings', children:[ {name:'Language', to:'/hr/settings/general/languages', icon:''}, {name:'Marital Status', to:'/hr/settings/general/marital-status', icon:''}, {name:'Nationalit
var data = [
{name:'hr', to:'/hr/settings', children:[
{name:'Language', to:'/hr/settings/general/languages', icon:''},
{name:'Marital Status', to:'/hr/settings/general/marital-status', icon:''},
{name:'Nationalities', to:'/hr/settings/general/nationalities', icon:''},
{name:'Ethnicities', to:'/hr/settings/general/ethnicities', icon:''},
{name:'Religions', to:'/hr/settings/general/religions', icon:''},
{name:'Tribes', to:'/hr/settings/general/tribes', icon:''},
{name:'Relations', to:'/hr/settings/general/relations', icon:''}
]},
{name:'education', to:'/hr/education', children:[
{name:'Universities',to:'/hr/settings/education/universities', icon:''},
{name:'Relations',to:'//hr/settings/education/relations', icon:''}
]}
];
因此,我期待着做的是找到数据数组的索引,它必须在它或它的子元素中具有类似于某个字符串的值
所以我有以下几点
function getArrayIndex(tovalue) {
const pathnavigated = data.find(link => link.to === tovalue);
return data.indexOf(pathnavigated);
}
以上内容适用于数组eggetArrayIndex('/hr/settings')
,但现在我希望它也搜索子级
乙二醇
应该返回第一个索引
和getArrayIndex('/hr/settings/education/universions')
应返回第二个索引
如何使函数甚至搜索子数组并返回父数组(子数组)上的索引值?我刚刚对函数
getArrayIndex
做了一点修改,并添加了以下内容:
data.find(link=>link.children.filter(b=>b.to==tovalue).length>0)
在这里,我过滤子项,如果至少有一个子项与字符串匹配,则返回它
var数据=[
{名称:'hr',收件人:'/hr/settings',子项:[
{名称:'Language',收件人:'/hr/settings/general/languages',图标:''},
{姓名:'婚姻状况',收件人:'/hr/settings/general/mutualstatus',图标:'''},
{名称:'nations',收件人:'/hr/settings/general/nations',图标:''},
{名称:'Ethnicities',收件人:'/hr/settings/general/Ethnicities',图标:''},
{名称:'electronics',收件人:'/hr/settings/general/electronics',图标:''},
{名称:'Tribes',至:'/hr/settings/general/Tribes',图标:''},
{名称:'Relations',收件人:'/hr/settings/general/Relations',图标:''}]},
{姓名:'education',收件人:'/hr/education',儿童:[
{名称:'universions',收件人:'/hr/settings/education/universions',图标:''},
{名称:'Relations',收件人:'//hr/settings/education/Relations',图标:''}]}
]
函数getArrayIndex(tovalue){
constPathNavigated=data.find(link=>link.children.filter(b=>b.to==tovalue).length>0);
返回data.indexOf(路径导航);
}
console.log(getArrayIndex('/hr/settings/education/universions'))
我只是对您的函数getArrayIndex
做了一点修改,并添加了以下内容:
data.find(link=>link.children.filter(b=>b.to==tovalue).length>0)
在这里,我过滤子项,如果至少有一个子项与字符串匹配,则返回它
var数据=[
{名称:'hr',收件人:'/hr/settings',子项:[
{名称:'Language',收件人:'/hr/settings/general/languages',图标:''},
{姓名:'婚姻状况',收件人:'/hr/settings/general/mutualstatus',图标:'''},
{名称:'nations',收件人:'/hr/settings/general/nations',图标:''},
{名称:'Ethnicities',收件人:'/hr/settings/general/Ethnicities',图标:''},
{名称:'electronics',收件人:'/hr/settings/general/electronics',图标:''},
{名称:'Tribes',至:'/hr/settings/general/Tribes',图标:''},
{名称:'Relations',收件人:'/hr/settings/general/Relations',图标:''}]},
{姓名:'education',收件人:'/hr/education',儿童:[
{名称:'universions',收件人:'/hr/settings/education/universions',图标:''},
{名称:'Relations',收件人:'//hr/settings/education/Relations',图标:''}]}
]
函数getArrayIndex(tovalue){
constPathNavigated=data.find(link=>link.children.filter(b=>b.to==tovalue).length>0);
返回data.indexOf(路径导航);
}
log(getArrayIndex('/hr/settings/education/universions'))
我会使用some()
而不是filter()
,因此您不必检查长度。如果任何子项通过lambda中的检查,则某些子项返回true。如果仍要搜索顶级项目,请不要忘记检查这两个条件:link.to==tovalue | | link.children.some(c=>c.to==tovalue)
我会使用some()
而不是filter()
,因此您不必检查长度。如果任何子项通过lambda中的检查,则某些子项返回true。如果仍要搜索顶级项目,请不要忘记检查这两个条件:link.to==tovalue | | link.children.some(c=>c.to==tovalue)
有人已经打败我了。。但是
function getIndex(array, search) {
for (let i = 0;i < array.length; i++) {
if (array[i].to === search) {
return i;
}
if (Array.isArray(array[i].children)) {
for (let j = 0; j < array[i].children.length; j++) {
if (array[i].children[j].to === search) {
return j;
}
}
}
}
return -1;
}
函数getIndex(数组,搜索){
for(设i=0;ifunction getIndex(array, search) {
for (let i = 0;i < array.length; i++) {
if (array[i].to === search) {
return i;
}
if (Array.isArray(array[i].children)) {
for (let j = 0; j < array[i].children.length; j++) {
if (array[i].children[j].to === search) {
return j;
}
}
}
}
return -1;
}
函数getIndex(数组,搜索){
for(设i=0;i1
。getArrayIndex('/hr/settings/education/university')
应该返回第二个索引-如果是顶级索引,这是有意义的。我相信他想要的是孩子的索引,而不是顶级索引。描述说第一个例子应该返回第一个索引,我想这意味着1
。而getArrayIndex('/hr/settings/education/universions')
应该返回第二个索引,其中
function getIndex(array, search) {
for (let i = 0;i < array.length; i++) {
if (array[i].to === search) {
return i;
}
if (Array.isArray(array[i].children)) {
for (let j = 0; j < array[i].children.length; j++) {
if (array[i].children[j].to === search) {
return j;
}
}
}
}
return -1;
}