Skip to content

Instantly share code, notes, and snippets.

@michaelwclark
Last active August 17, 2018 21:23
Show Gist options
  • Save michaelwclark/181ce37ec5eec367c5d3dc42478f4cb1 to your computer and use it in GitHub Desktop.
Save michaelwclark/181ce37ec5eec367c5d3dc42478f4cb1 to your computer and use it in GitHub Desktop.
Combine N arrays into unique combinations
const createUniqueCombinationsFromArrays = (head, ...tail) =>
tail.length
? head.reduce((a, x) => [...a, ...createUniqueCombinationsFromArrays(...tail).map(_=>x+_)],[])
: head
const a1 = ['1','2','3','4']
const a2 = ['a','b']
const a3 = ['x','y']
const a4 = [':',',','?','!', '&']
const unique1And2 = createUniqueCombinationsFromArrays(a1, a2)
console.log(unique1And2)
console.log(unique1And2.length)
const unique1And2And3 = createUniqueCombinationsFromArrays(a1, a2, a3)
console.log(unique1And2And3)
console.log(unique1And2And3.length)
const unique1And2And3And4 = createUniqueCombinationsFromArrays(a1, a2, a3, a4)
console.log(unique1And2And3And4)
// 4 * 2 * 2 * 5 = 80
console.log(unique1And2And3And4.length)
const createUniqueCombinationsOfObjectsFromArrays = (head, ...tail) =>
tail.length
? head.reduce((a, x) => [...a, ...createUniqueCombinationsOfObjectsFromArrays(...tail).map(_=>({...x, ..._}))],[])
: head
const users = [
{user_name:'user1'},
{user_name:'user2'},
]
const audiences = [
{audience_name:'audience1'},
{audience_name:'audience2'},
]
const creatives = [
{creative_name:'creative1'},
{creative_name:'creative2'},
]
console.log(createUniqueCombinationsOfObjectsFromArrays(users, audiences,creatives))
console.log(createUniqueCombinationsOfObjectsFromArrays(users, audiences,creatives).length)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment