Combination of arrays of object in javascript

Issue

I need to combine all the possible arrays of object in javascript.
There are different levels of arrays with values, and it has to be mixed in all the possible ways.

I think I should go for a recursive call but not familiar with it.
Please help me to figure this out.

For the clear question, here is input and output example.

Input:

[
  [{
    level: 1,
    value: "a"
  }, {
    level: 1,
    value: "b"
  }],
  [{
    level: 2,
    value: "c"
  }, {
    level: 2,
    value: "d"
  }],
  [{
    level: 3,
    value: "e"
  }, {
    level: 3,
    value: "f"
  }]
]

Expected Output:

[
  [{
    level: 1,
    value: "a"
  }, {
    level: 2,
    value: "c"
  }, {
    level: 3,
    value: "e"
  }],
  [{
    level: 1,
    value: "a"
  }, {
    level: 2,
    value: "c"
  }, {
    level: 3,
    value: "f"
  }],
  [{
    level: 1,
    value: "a"
  }, {
    level: 2,
    value: "d"
  }, {
    level: 3,
    value: "e"
  }],
  [{
    level: 1,
    value: "a"
  }, {
    level: 2,
    value: "d"
  }, {
    level: 3,
    value: "f"
  }]
  [{
    level: 1,
    value: "b"
  }, {
    level: 2,
    value: "c"
  }, {
    level: 3,
    value: "e"
  }],
  [{
    level: 1,
    value: "b"
  }, {
    level: 2,
    value: "c"
  }, {
    level: 3,
    value: "f"
  }],
  [{
    level: 1,
    value: "b"
  }, {
    level: 2,
    value: "d"
  }, {
    level: 3,
    value: "e"
  }],
  [{
    level: 1,
    value: "b"
  }, {
    level: 2,
    value: "d"
  }, {
    level: 3,
    value: "f"
  }]
]

Solution

How about simply iterating over all levels you have and know? Then you can store triplets and are guaranteed to have each possibility

options = []

for (const level1 of levels[0]) {
    for (const level2 of levels[1] {
        for (const level3 of levels[2] {
            options.push([level1, level2, level3])
        }
    } 
} 

Answered By – ted

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published