【问题标题】:Find Object inside an Array of nested Objects (Lodash / Javascript / Typescript) [duplicate]在嵌套对象数组中查找对象(Lodash / Javascript / Typescript)[重复]
【发布时间】:2019-03-21 04:19:42
【问题描述】:

假设有一个如下所示的对象数组:

    let example = [
      {
        children: [{
          data: { id: 2, group: 1001, name: "Audi" },
        }],
        data: { id: 1, group: 1000, name: "Cars" }
      },
      {
        children: [{
          data: { id: 4, group: 1003, name: "Airbus A320" },
        }],
        data: { id: 3, group: 1002, name: "Planes" }
      },
      {
        children: [{
          data: { id: 6, group: 1005, name: "Departed" }
        }],
        data: { id: 5, group: 1006, name: "movies" }
      }
    ]

在我的应用程序中,用户选择了一个 Tablerow,我得到了选定的行信息,也就是 'data' object,例如

{ id: 2, group: 1001, name: "Audi" }

现在我想使用 lodash 或 javascript/typescript 在我的数组中根据 Id 找到选定的数据对象。

我将如何做到这一点? children 数组给我带来了问题。

编辑:还应该找到 Child of a Child。

{
        children: [{
          children: [{
             data: {id : 7, group 1001, name: "A8"},
             children: [{...}]
          }],
          data: { id: 2, group: 1001, name: "Audi" },
        }],
        data: { id: 1, group: 1000, name: "Cars" }
      }

【问题讨论】:

  • 您是在用 TypeScript 还是 JavaScript 寻求答案?
  • @PatrickRoberts 目前在 TypeScript 或 JavaScript 中并不重要。
  • 是要在所选数据对象的id 的数组中查找数据对象,还是要在children 数组中查找数据inside选择数据对象的id ?
  • 两个都想找

标签: javascript arrays typescript lodash


【解决方案1】:

/** find by id data using recursion */
function findById(data, id) {
  for (const datum of data) {
    if (datum.data.id == id) return datum
    if (datum.children) {
      let result = findById(datum.children, id)
      if (result) return result
    }
  }
}


let example = [{
    children: [{
      data: {
        id: 2,
        group: 1001,
        name: "Audi"
      },
    }],
    data: {
      id: 1,
      group: 1000,
      name: "Cars"
    }
  },
  {
    children: [{
      data: {
        id: 4,
        group: 1003,
        name: "Airbus A320"
      },
    }],
    data: {
      id: 3,
      group: 1002,
      name: "Planes"
    }
  },
  {
    children: [{
      data: {
        id: 6,
        group: 1005,
        name: "Departed"
      }
    }],
    data: {
      id: 5,
      group: 1006,
      name: "movies"
    }
  }
]



console.log(findById(example, 2))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2023-03-26
    • 2017-01-24
    相关资源
    最近更新 更多