我有以下数组数据
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);
}
上面的方法适用于数组,例如 getArrayIndex('/hr/settings')
但现在我希望它也搜索子元素
例如
getArrayIndex('/hr/settings/general/marital-status')
应该返回第一个索引
和 getArrayIndex('/hr/settings/education/universities')
应返回第二个索引
我如何使函数甚至搜索子项并返回(子项)父数组上的索引值
最佳答案
我刚刚对您的函数 getArrayIndex
进行了轻微修改并添加了以下内容:
data.find(link => link.children.filter(b=>b.to == tovalue).length > 0)
在这里,我过滤子项,如果至少有一个子项与您的字符串匹配,则返回它。
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.children.filter(b=>b.to == tovalue).length > 0);
return data.indexOf(pathnavigated);
}
console.log(getArrayIndex('/hr/settings/education/universities') )
关于Javascript 在嵌套数组中使用 find,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52172283/