Javascript 我如何创建一个数组的扁平数组,它是数组中一个对象的一部分,实际上是多个对象的子数组?

Javascript 我如何创建一个数组的扁平数组,它是数组中一个对象的一部分,实际上是多个对象的子数组?,javascript,Javascript,我相信这个问题已经被回答了很多次,但我想我要么不知道如何提问,要么我不理解如何将简单数组reduce/plant场景中的概念应用到稍微复杂一些的对象数组中 假设我有一个对象数组'Item',它有两个属性'Name'和'SubItems',这本身就是一个具有'Name'属性的对象数组 从概念上讲,像这样的东西 [ { Name: 'Obj1', SubItems: [{Name: 'Sub1'}, {Name: 'Sub2'}, {Name: 'Sub'3}] }, { Name: 'O

我相信这个问题已经被回答了很多次,但我想我要么不知道如何提问,要么我不理解如何将简单数组reduce/plant场景中的概念应用到稍微复杂一些的对象数组中

假设我有一个对象数组'Item',它有两个属性'Name'和'SubItems',这本身就是一个具有'Name'属性的对象数组

从概念上讲,像这样的东西

[
  { Name: 'Obj1', SubItems: [{Name: 'Sub1'}, {Name: 'Sub2'}, {Name: 'Sub'3}] }, 
  { Name: 'Obj2', SubItems: [{Name: 'Sub4'}, {Name: 'Sub5'}] }
]
“展平”或“选择许多”子项的好方法是什么,最好只使用javascript?基本上,我需要一个子项数组:

[
{Name: 'Sub1'},
{Name: 'Sub2'},
{Name: 'Sub3'},
{Name: 'Sub4'},
{Name: 'Sub5'}
]

听起来您只需要提取
子项
属性。您可以通过将
分散到
[]中来实现这一点。concat

const输入=[
{Name:'Obj1',子项:[{Name:'Sub1'},{Name:'Sub2'},{Name:'Sub3'}]},
{Name:'Obj2',子项:[{Name:'Sub4'},{Name:'Sub5'}]}
];
console.log(
[].concat(…input.map(({SubItems})=>SubItems))

);
听起来您只需要提取
子项
属性。您可以通过将
分散到
[]中来实现这一点。concat

const输入=[
{Name:'Obj1',子项:[{Name:'Sub1'},{Name:'Sub2'},{Name:'Sub3'}]},
{Name:'Obj2',子项:[{Name:'Sub4'},{Name:'Sub5'}]}
];
console.log(
[].concat(…input.map(({SubItems})=>SubItems))
);使用with
[]
作为初始值,如中所述:

使用带有
[]
的值作为初始值,如中所述:


我认为这些都是正确的答案,我可以让它们中的任何一个在我的具体场景中工作,但是这个答案让我以最快的速度找到了我的解决方案。reduce和concat的组合消除了空集,组合了我需要的,这正是我所寻找的。我认为这些都是正确的答案,我可以让它们中的任何一个在我的确切场景中工作,但这个答案让我以最快的速度找到了解决方案。reduce和concat的结合消除了空集,结合了我所需要的,这正是我想要的。
var foo = [
  { Name: 'Obj1', SubItems: [{Name: 'Sub1'}, {Name: 'Sub2'}, {Name: 'Sub3'}] }, 
  { Name: 'Obj2', SubItems: [{Name: 'Sub4'}, {Name: 'Sub5'}] }
];
var bar = foo.reduce((a, b) => a.concat(b.SubItems), []);