Last active
August 17, 2018 21:23
-
-
Save michaelwclark/181ce37ec5eec367c5d3dc42478f4cb1 to your computer and use it in GitHub Desktop.
Combine N arrays into unique combinations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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