我有一个名为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。
最佳答案
您可以使用reduce
和filter
等数组方法来获取独特模块的列表:
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/