如何从带有嵌套对象数组的对象数组中获取所有特定值?

时间:2020-04-08 13:52:39

标签: javascript arrays object tree logic

我有一个数组:

   const arr = [
  {
    name: "name 1",
    dontShow: true,
    children: [
      {
        name: "name 2",
        key4: 4,
        dontShow: false,
        children: [],
      },
    ],
  },
  {
    name: "name 3",
    dontShow: false,
    children: [
      {
        name: "name 4",
        dontShow: true,
        children: [
          {
            name: "name 5",
            dontShow: false,
            children: null,
          },
        ],
      },
    ],
  },
];

除了具有属性dontShow: true的对象之外,每个对象都需要一个名称数组 因此,从该示例中,我希望得到这样的数组:

["name2", "name3", "name5"]

基本上,我需要从树状结构中获得一个平面数组,lodash /下划线解决方案也很棒,我只是没有找到它们

2 个答案:

答案 0 :(得分:2)

您可以使用递归函数

Projectile

答案 1 :(得分:0)

您可以看到带有dontShow外观的简单名称列表。

const
    getNames = array => array.flatMap(({ name, dontShow, children }) => [
        ...(dontShow ? [] : [name]),
        ...getNames(children || [])
    ]),
    array = [{ name: "name 1", dontShow: true, children: [{ name: "name 2", key4: 4, dontShow: false, children: [] }] }, { name: "name 3", dontShow: false, children: [{ name: "name 4", dontShow: true, children: [{ name: "name 5", dontShow: false, children: null, }] }] }],
    result = getNames(array);

console.log(result);