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

标签 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。

最佳答案

您可以使用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)

关于JavaScript - 如何将多个嵌套数组中的所有对象放入一个新的唯一对象数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42822580/

相关文章:

javascript - 检测 Angular 4 中组件的变化

javascript - 在 jQuery 中使用 typeof 运算符时遇到问题

javascript - Laravel 5.4 Blade 和 select2 不工作

javascript - Bootstrap Carousel 在 Chrome 中不工作

JavaScript - 访问数组

java - 在java中使用对象数组时出现NullPointerException

javascript - 类型缺少调用签名

reactjs - create-react-app with --template typescript 不创建 .tsx 文件

javascript - flowplayer - 显示图像而不是播放器

arrays - 用 PySpark 中的对应元素替换数组中的元素