Estoy tratando de crear una combinación de todas las variantes posibles de las matrices que figuran a continuación, que se explican por sí mismas.
let arr1 = ['Small', 'Medium', 'Large', 'Extra-Large'] let arr2 = ['Black','Red','White'] let arr3 = ['Normal','Limited-Edition'] let combos = [] arr1.forEach((i) => { arr2.forEach((j) => { arr3.forEach((k) => { combos.push(i + '-' + j + '-' + k) }) }) }) console.log(combos)Esto da el resultado que quiero, sin embargo, quiero crear una función que tome una matriz arbitraria de matrices, [arr1, arr2, arr3... arrN] y crea un bucle anidado de cada uno de ellos, y devuelve un valor combinado de cuerdas
¿Cómo hago para crear tal función?
Puedes usar algo como esto usando reduce . Hice referencia a esta publicación
let arr1 = ['Small', 'Medium', 'Large', 'Extra-Large'] let arr2 = ['Black','Red','White'] let arr3 = ['Normal','Limited-Edition'] let arr4 = ['x','y','z'] let arr = [arr1,arr2,arr3,arr4] let combined = arr.reduce((a,c)=>{ return a.flatMap(x=>c.map(y=>x.concat(y))) },[[]]).map((z) => z.join("-")) console.log(combined) console.log(combined.length) //4*3*2*3 = 72ACTUALIZACIÓN : esta se toma directamente de la respuesta principal con una modificación muy pequeña
let arr1 = ['Small', 'Medium', 'Large', 'Extra-Large'] let arr2 = ['Black','Red','White'] let arr3 = ['Normal','Limited-Edition'] let arr4 = ['x','y','z'] let arr = [arr1,arr2,arr3,arr4] const cartesian = (a) => a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat()))).map(x=>x.join("-")); console.log(cartesian(arr)) const arr1 = ['Small', 'Medium', 'Large', 'Extra-Large'] const arr2 = ['Black','Red','White'] const arr3 = ['Normal','Limited-Edition'] const arr4 = ['x','y','z'] const arr = [arr1,arr2,arr3,arr4] const merged = [].concat.apply([], arr); console.log(merged);