Javascript 在嵌套数组中使用 find

标签 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:'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/

相关文章:

javascript - CanvasJs,更新数据

python - 复制列表 : editing copy without changing original

php - 通过键合并(合并)2 个数组并更改结果数组中的键名

javascript - 使用 ui.router 渲染页面的 Angular JS 事件

javascript - 如何从 json 对象构建键值的 JavaScript 数组

ios - 在 Swift 中搜索数组对象

javascript - HTML 表格中的值小计

javascript - 在nodejs中关闭浏览器时删除 session

javascript - 确保同一组件的多个实例具有非共享状态

javascript - jQuery 选择表行中的所有复选框