首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用js获取等级数据中的id值

用js获取等级数据中的id值
EN

Stack Overflow用户
提问于 2022-06-30 10:11:10
回答 1查看 86关注 0票数 0

我将等级数据作为树数组:

代码语言:javascript
复制
var myData = [
    {
      id: 0,
      title:"Item 1"
    }, {
      id: 1,
      title:"Item 2",
      subs: [
        {
          id: 10,
          title:"Item 2-1",
          subs: [
        {
          id: 100,
          title:"Item 2-2-1"
        }, {
          id: 110,
          title:"Item 2-2-2"
        }, {
          id: 120,
          title:"Item 2-2-3"
        }
      ]
        }, {
          id: 11,
          title:"Item 2-2"
        }, {
          id: 12,
          title:"Item 2-3"
        }
      ]
    }, {
      id: 2,
      title:"Item 3"
    },
    // more data here
];

我需要在这个数组中按标题获得id。我试着使用这个函数:

代码语言:javascript
复制
console.log(myData.findIndex(item=>item.title==="Item 3"))

但这对“第二条第二条”不起作用。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-30 10:23:21

我创建了这个简单的findId方法,以便找到标题,并作为数据数组结构的结果返回idundefined

findId(title, list)函数它的目的是迭代在第二个参数中接收到的列表,查找每个元素中的标题,如果有匹配,则返回id,否则它将检查元素中是否存在subs,在这种情况下,它被递归调用为findId函数,使用元素的子元素作为列表。如果找到一个元素,则返回其id,否则迭代将继续。

--假设每个标题在数组中都是唯一的--这将很好地工作。

,否则只会找到第一个.

请看以下内容:

代码语言:javascript
复制
function findId(title, list) {
  for (const _item of list) {
    if (_item.title === title) {
      // Return some top-level id
      return _item.id;
      
    // If the item is not the one, check if it has subs
    } else if (_item?.subs) { 
    
      // Use _item.subs as a list, calling the function recursively
      const subId = findId(title, _item.subs);
      
      // Return some nested subId if found
      if (subId !== undefined) return subId;
    }
  }
  // Return undefined if not found
  return undefined;
}


var myData = [
{
    id: 0,
    title: "Item 1"
  }, 
  {
    id: 1,
    title: "Item 2",
    subs: [
    {
      id: 10,
      title: "Item 2-1",
      subs: [
      {
        id: 100,
        title: "Item 2-2-1"
      }, {
        id: 110,
        title: "Item 2-2-2"
      }, {
        id: 120,
        title: "Item 2-2-3"
      }]
    }, {
      id: 11,
      title: "Item 2-2"
    }, {
      id: 12,
      title: "Item 2-3"
    }]
  }, 
  {
    id: 2,
    title: "Item 3"
  },
  // more data here
];

console.log("Id: ", findId("Item 2", myData));
console.log("Id: ", findId("Item 2-1", myData));
console.log("Id: ", findId("Item 2-2-2", myData));
console.log("Id: ", findId("Wrong Title", myData));
代码语言:javascript
复制
console.log("Id: ", findId("Item 2", myData));<br/>
console.log("Id: ", findId("Item 2-1", myData));<br/>
console.log("Id: ", findId("Item 2-2-2", myData));<br/>
console.log("Id: ", findId("Wrong Title", myData));<br/>

最后一个按预期返回undefined,因为标题不包括在数组中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72813997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档