javascript - 如何查找与提供的 slug 匹配的某个对象的索引

标签 javascript data-structures

我有以下数据结构。这是一个深层嵌套的对象。

从以下数据结构中,我需要找到一个对象的索引,该对象的slug为level-1.1.3,这样我就可以知道是否提供了该slug,我必须添加该对象子数组内的项目。如果没有找到任何 slug,则在顶层添加,例如 另一个 1 B 级 对象。

我尝试了以下方法,但我没有采用有效的方法,也找不到索引,但找到了整个对象。问题是,它也会转到 else block ,因此如果我从 else block 返回 null 或其他内容,那么如果对象的级别太深,则无法找到对象中包含的 slug。

const data = [{
    title: "Level 1 A",
    slug: "level-1-A",
    url: "url",
    children: [{
      expanded: true,
      title: "Level 1.1",
      slug: "level-1.1",
    }]
  },
  {
    title: "Another Level 1 B",
    slug: "another-level-1-b",
    url: "url",
    children: []
  },
  {
    title: "Level 1 C",
    slug: "level-1-c",
    expanded: true,
    children: [{
      expanded: true,
      title: "Level 1.1",
      slug: "level-1.1",
      children: [{
        title: "Level 1.1.1",
        slug: "level-1.1.1",
        url: "/child",
        children: [{
          title: "Level 1.1.2",
          slug: "level-1.1.2",
          url: "/",
          children: [{
            title: "Level 1.1.3",
            slug: "level-1.1.3",
            url: "/"
          }]
        }]
      }]
    }]
  }
];


function findIndex(data, slug) {
  var index = 0;
  for (var i = 0; i < data.length; i++) {
    if (data[i].slug === slug) {
      console.log('found in depth', data[i]);
      break;
    } else if (data[i].children && data[i].children.length > 0) {
      console.log('did not find in first level')
      findIndex(data[i].children, slug)
    } else {
      console.log('did not find at all')
    }
  }
}


findIndex(data, slug = "level-1.1.3")

最佳答案

您可以在其中使用数组查找和递归来查找 slug (或其他任何内容):

var data = [
  {
    title: "Level 1 A",
    slug: "level-1-A",
    url: "url",
    children: [
      {
        expanded: true,
        title: "Level 1.1",
        slug: "level-1.1",
      }
    ]
  },
  {
    title: "Another Level 1 B",
    slug: "another-level-1-b",
    url: "url",
    children: []
  },
  {
    title: "Level 1 C",
    slug: "level-1-c",
    expanded: true,
    children: [
      {
        expanded: true,
        title: "Level 1.1",
        slug: "level-1.1",
        children: [
          {
            title: "Level 1.1.1",
            slug: "level-1.1.1",
            url: "/child",
            children: [
              {
                title: "Level 1.1.2",
                slug: "level-1.1.2",
                url: "/",
                children: [
                  { title: "Level 1.1.3", slug: "level-1.1.3", url: "/" }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
];

function findslug(title){
  var slug = "";
  data.find(function f(current){
    if(current.title === title){
      slug = current.slug;
      return current;
    };
    if(current.children)
      return current.children.find(f);
  });
  return slug;
}

console.log(findslug("Level 1.1.3"));
console.log(findslug("Level 1 C"));

关于javascript - 如何查找与提供的 slug 匹配的某个对象的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52547011/

相关文章:

javascript - Edge.js 从 Expandoobject 转换为字符串

c - 为什么我从 void** 初始化的结构中获取垃圾值

元组类型的 Java 字典值

c - 如何用我的结构类型创建一个数组?

javascript - 响应式图像 src 取决于媒体

javascript - DataTables:重置表数据

javascript - Angular 绝对路线和路线/stateProvider

javascript - JavaScript 中的动态正则表达式模式

c - 是否应该将所有预期从二进制文件中读取的结构标记为已打包?

java - 是否有在一棵树中处理不同类别的做法? (Java 或通用)