Skip to content

How can make a list from matrix in javascript?

I have an array like this

  const input_array= [
    ["black", "blue"],
    ["large", "medium"],
    ["a", "b", "c"]
    //... is it dynamic can be added many rows
  ];

How would I get an array like this :

const finallist = [
    ["black", "large", "a"],
    ["black", "large", "b"],
    ["black", "large", "c"],
      
    ["black", "medium", "a"],
    ["black", "medium", "b"],
    ["black", "medium", "c"],

    ["blue", "large", "a"],
    ["blue", "large", "b"],
    ["blue", "large", "c"],
      
    ["blue", "medium", "a"],
    ["blue", "medium", "b"],
    ["blue", "medium", "c"],
  ]

Please Remember input_array is dynamic

Please advice me how can I do this

Answer

Look at this, might be helpful:

const input_array = [
    ["black", "blue"],
    ["large", "medium"],
    ["a", "b", "c"]
    //... is it dynamic can be added many rows
];
const mmc = input_array.reduce((e, r) => e * r.length, 1);
const finallist = input_array.map((x,i)=>({index:i,arr:x})).reduce((e, r) => {
    for (var u = 0; u < mmc; u++) e[u] && (!r.arr.some(r => e[u].includes(r)) || e[u].length <= r.index) ? e[u].push(r.arr[u % r.arr.length]) : e.push([r.arr[u % r.arr.length]]);
    return e.sort(), e
}, []);

Careful! This might break your browser in large matrix scales.