如何创建一个函数来从嵌套对象中检索所有孩子的 id

格温尼尔·盖约

我想检索特定组的所有子 ID,可以嵌套或不嵌套。

这是一个示例 json:

[
      {
        id: 1,
        name: 'Desjardins Group 1',
        children: [
          { id: 2, name: 'Analysts', children: [] },
          { id: 3, name: 'Administration', children: [] }
        ]
      },
      {
        id: 4,
        name: 'Desjardins Group 2',
        children: [
          { id: 5, name: 'Consultants1', children: [] },
          {
            id: 6,
            name: 'Consultant2',
            children: [
              {
                id: 7, name: 'Interns', children: [
                  { id: 8, name: 'subInterns1', children: [] },
                  { id: 9, name: 'subInterns2', children: [] },
                  { id: 10, name: 'subInterns3', children: [] }
                ]
              }
            ]
          }
        ]
      }
    ]

我正在尝试制作一个带有 id 参数的函数,并返回所有子 ID。例如:getChildGroups(6) 将返回 7、8、9 和 10。

我想递归函数和过滤器是要走的路,但我找不到合适的例子。

阿尔尼塔克

这是约翰鲍尔答案的简化版本。

第一个函数只查找与给定 ID 匹配的第一个节点,不需要任何数据积累:

function findNode(data, id) {
    if (!Array.isArray(data)) return;

    for (let entry of data) {
        if (entry.id === id) {
            return entry;
        } else {
            const node = findNode(entry.children, id);
            if (node) { 
                return node;    
            }           
        }       
    }   
}

第二个函数只获取子 ID,将它们存储在传递的数组中,而不创建任何中间数组:

function getChildIds(node, result = []) {
    if (!node) return;
    if (!Array.isArray(node.children)) return;

    for (let entry of node.children) {
        result.push(entry.id);
        getChildIds(entry, result);
    }
    return result;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PostgreSQL。如何在递归查询中为所有孩子保存第一个 id?

选择一个父母和所有给定父母或孩子ID的孩子

ID 函数是否创建一个新对象?

所有`id'总是来自最后一个对象

一旦通过 FXML 加载了一个节点,如何检索所有具有 fx:id 的项目?

一个对象包含两个数组。如何匹配所有数组的ID?

如何从当前创建一个新数组,并更改所有单个项目的“ id”

更新文档并创建一个字段,该字段是集合MongoDB中具有相同ID的所有对象的数组

如何通过使用子元素的ID选择父对象的第一个孩子?

将多个ID保存到一个jQuery Cookie中,并在以后检索所有值

如何检索特定索引中的所有文档ID(_id)

就像文本的 SUMIF 一样,Google Sheets 中是否有一个函数来组合给定公共 ID 的字母数字值?

SQLServer:如何检索现有ID或最后一个ID

如何检索对象 ID 值的索引值,形成一个包含多个对象的数组

使用id检索嵌套在另一个元素中的元素

如何检查对象数组是否包含另一个对象数组JS的所有ID

我如何将CSS应用于所有元素,除非第一个孩子具有特定ID

如何检查一个 json 对象数组中的 id 是否存在于另一个 json 对象嵌套数组中?

在Solr中,如何获取所有文档的一个字段列表(文档ID)?

销毁所有记录后,为什么要创建一个新ID高于旧的最后一条记录的ID的新对象?

如何创建一个JavaScript函数来查找彼此嵌套的对象和数组

如何为一个 ID 下的所有文本输入添加一个类?

根据对象的 id 创建一个新的对象数组

创建表中所有用户的子查询,该用户ID在另一个表中

将一个数组中具有相同 id 的所有对象添加到另一个数组中具有相同 id 的对象的数组中

如何选择ID嵌套在CSS中具有类的另一个div中的div

jQuery只选择除具有相似ID的一个以外的所有对象

获取ID仅在一个表中且ID匹配的所有报告

如何根据引用表中是否包含来自不同列的另一个 ID 的至少一个实例来选择该 ID 的所有实例?