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);
}
以上内容适用于数组eg
getArrayIndex('/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;i有人已经在这方面击败了我。。但是

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;i你只想要索引?是的,只有索引?你只想要索引?是的,只有索引我相信他想要的是孩子的索引,而不是顶层的索引。描述中说第一个例子应该返回第一个索引,我想这意味着
1
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;
}