Skip to content

Instantly share code, notes, and snippets.

@perjo927
Last active September 25, 2021 12:05
Show Gist options
  • Save perjo927/2db7dc0231f8721b89326da5a520cfcf to your computer and use it in GitHub Desktop.
Save perjo927/2db7dc0231f8721b89326da5a520cfcf to your computer and use it in GitHub Desktop.
Combine
const categorizeValues = ([category, values]) =>
values.map(value => Object.fromEntries([[category, value]]))
const combineCategories = (prev, curr) =>
curr.flatMap(currEl => prev.map(prevEl => ({...prevEl, ...currEl})))
const combinations = input =>
Object.entries(input).map(categorizeValues).reduce(combineCategories);
/*
input
{ code: ["2xx", "3xx"], source: ["cdn", "internal"] }
output
[
{ code: '2xx', source: 'cdn' },
{ code: '3xx', source: 'cdn' },
{ code: '2xx', source: 'internal' },
{ code: '3xx', source: 'internal' }
]
input
{ code: ["2xx", "3xx"], source: ["cdn", "internal"], colors: ["blue", "red"] }
output
[
{ code: '2xx', source: 'cdn', colors: 'blue' },
{ code: '3xx', source: 'cdn', colors: 'blue' },
{ code: '2xx', source: 'internal', colors: 'blue' },
{ code: '3xx', source: 'internal', colors: 'blue' },
{ code: '2xx', source: 'cdn', colors: 'red' },
{ code: '3xx', source: 'cdn', colors: 'red' },
{ code: '2xx', source: 'internal', colors: 'red' },
{ code: '3xx', source: 'internal', colors: 'red' }
]
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment