Aquí muestro una matriz de 3 dimensiones, pero el número real de dimensiones varía y se conoce como n .
[ [ [1,2], [3,4] ], [ [5,6], [7,8] ] ] Tiene la misma longitud ( n ) que el número de dimensiones del arreglo donde el i-ésimo elemento representa el separador del i-ésimo nivel del arreglo.
[',', '_', '-'] 1-2_3-4,5-6_7-8Funciona para una matriz de 3 dimensiones pero no para una de 4 dimensiones.
Sé lo que está mal con mi código, pero no tengo idea de cómo solucionarlo.
Además, creo que hay métodos más simples y/o más eficientes.
const array = [[[1,2],[3,4]],[[5,6],[7,8]]]; const separators = [',', '_', '-']; const _separators = separators.reverse(); let i; function join(array, first = false) { const next = Array.isArray(array[0]); let result; if (next) { result = array.map(e => { if (first) { i = 0; } return join(e); }); i++; result = result.join(_separators[i]); } else { result = array.join(_separators[i]); } return result; } const result = join(array, true); console.log(result); const array = [[[[1,2],[3,4]],[[5,6],[7,8]]],[[['A','B'],['C','D']],[['E','F'],['G','H']]]]; const separators = ['|', ',', '_', '-']; const _separators = separators.reverse(); let i; function join(array, first = false) { const next = Array.isArray(array[0]); let result; if (next) { result = array.map(e => { if (first) { i = 0; } return join(e); }); i++; result = result.join(_separators[i]); } else { result = array.join(_separators[i]); } return result; } const result = join(array, true); console.log(result); // desired output: 1-2_3-4,5-6_7-8|A-B_C-D,E-F_G-HAlgo así con recursividad
const join = (array, separators, depth) => { if (depth < separators.length -1) { return array.map(el => join(el, separators, depth + 1)).join(separators[depth]); } else { return array.join(separators[depth]); } }; { const array = [[[1,2],[3,4]],[[5,6],[7,8]]]; const separators = [',', '_', '-']; console.log(join(array, separators, 0)); } { const array = [[[[1,2],[3,4]],[[5,6],[7,8]]],[[['A','B'],['C','D']],[['E','F'],['G','H']]]]; const separators = ['|', ',', '_', '-']; console.log(join(array, separators, 0)); }