简体   繁体   中英

JavaScript - How to put all of the objects from several nested arrays into a new array of unique objects

I have an an array of objects called packages . Each object has a property called modules that is another array of objects. Each object in each modules array has a unique ID. I want to put each unique object from all of the modules arrays into a single array, using the ID.

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' }]} 
];

I need the result to be:

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

I'm using TypeScript, but not ES6.

You can use Array methods like reduce and filter to get your list of unique modules:

 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) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM