【问题标题】:JavaScript - How to put all of the objects from several nested arrays into a new array of unique objectsJavaScript - 如何将多个嵌套数组中的所有对象放入一个新的唯一对象数组中
【发布时间】:2017-08-06 22:46:06
【问题描述】:

我有一个名为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。

【问题讨论】:

  • 酷。那么你尝试了什么? stackoverflow.com/help/mcve
  • packages 定义的第 4 行中,您有 { id: 1, name: 'module4' }。我认为这应该是id: 4?但是,如果您的模块 ID 对模块来说都是唯一的,那么与其将具有名称和 id 的对象存储在数组中,不如使用关联数组,其中 id 作为键和名称值。
  • @PeretteBarella 谢谢我修正了错字

标签: javascript arrays typescript javascript-objects


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2021-06-07
    • 2021-11-17
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多