JavaScript - 如何将来自多个嵌套数组的所有对象放入一个新的唯一对象数组中

时间:2017-03-15 23:23:21

标签: javascript arrays typescript javascript-objects

我有一个名为packages的对象数组。每个对象都有一个名为modules的属性,它是另一个对象数组。每个modules数组中的每个对象都有一个唯一的ID。我想使用ID将所有modules数组中的每个唯一对象放入一个数组中。

packages = [
  { id: 1, modules:[{ id: 1, name: 'module1' }, { id: 2, name: 'module2' }]},
  { id: 2, modules:[{ id: 1, name: 'module1' }, { id: 3, name: 'module3' }]},
  { id: 3, modules:[{ id: 2, name: 'module2' }, { id: 4, name: 'module4' }]} 
];

我需要结果:

allModules = [
  { id: 1, name: 'module1' },
  { id: 2, name: 'module2' },
  { id: 3, name: 'module3' },
  { id: 4, name: 'module4' }
];

我使用TypeScript,但不使用ES6。

1 个答案:

答案 0 :(得分:3)

您可以使用reducefilter等数组方法获取唯一模块列表:



var packages = [
  { id: 1, modules:[{ id: 1, name: 'module1' }, { id: 2, name: 'module2' }]},
  { id: 2, modules:[{ id: 1, name: 'module1' }, { id: 3, name: 'module3' }]},
  { id: 3, modules:[{ id: 2, name: 'module2' }, { id: 4, name: 'module4' }]} 
]

var result = packages.reduce(function (a, e) {
  return a.concat(e.modules)
}, []).filter(function (e) {
  return !this[e.id] && (this[e.id] = true)
}, {})

console.log(result)