代码之家  ›  专栏  ›  技术社区  ›  ekjcfn3902039

如何有效地按键返回子数组

  •  -2
  • ekjcfn3902039  · 技术社区  · 5 年前

    我有以下结构:

    myArr: [
      {
        key1: 'foo',
        myArr: [
          { a: 'blah' }
          { a: 'blah2'}
        ],
      },
      {
        key1: 'foo2',
      }
      ...More similar entries
    ];
    

    我正在寻找一种有效的方法将子数组提取到单独的数组中。子数组与父数组具有相同的键。子数组可能存在,也可能不存在。

    我可以在一个循环中迭代它们,并手动将它们添加到一个新的数组(如果它们存在的话)。

    如果在这种特殊情况下可能的话,我更愿意使用某种映射/过滤器。

    我追求的结果是:

    myArr: [
      { a: 'blah' },
      { a: 'blah2'},
      { a: 'blahN'}
    ],
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   joh04667    5 年前

    实现这一点的一个巧妙方法就是减少初始数组:

    let result = myArr.reduce((a,b) => a.concat(b.myArr || []), []);
    

    它从一个空数组开始,只将选定的属性连接到其中,从而生成一个对象数组。如果子阵列是 undefined 否则,我们可以 concat 空数组(实际上不会向原始数组添加任何内容)