Esta puede ser una pregunta duplicada. Pero no encontré ninguna pregunta similar en este foro.
Estoy tratando de modificar valores en una matriz a un formato diferente.
arrayInput = ['A', 'B', 'C', 'D', 'E', 'F']; arrayOutput= ['A;B', 'C;D', 'E;F'];Obtuve la solución con el siguiente enfoque.
let arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'] arrayOutput = [arrayInput[0]+';'+ arrayInput[1], arrayInput[2]+';'+ arrayInput[3]]; if (arrayInput[4]) { let val = arrayInput[4] + (arrayInput[5] ? ';'+arrayInput[5] : ''); arrayOutput.push(val); } console.log(arrayOutput);Pero estoy buscando una solución genérica tal que incluso si tengo más elementos en la matriz, debería generar la salida en el formato deseado.
['A', 'B', 'C', 'D', 'E', 'F', 'G'] ==> ['A;B', 'C;D', 'E;F', 'G'] ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] ==> ['A;B', 'C;D', 'E;F', 'G;H']Gracias por el apoyo
Use un bucle for e increméntelo en 2 en cada iteración:
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; const res = []; for (let i = 0; i < arrayInput.length; i += 2) { const part1 = arrayInput[i]; const part2 = arrayInput[i + 1]; if (part1) { res.push(part1 + (part2 ? (';' + part2) : '')); } } console.log(res);Puede usar Array#reduce como en la siguiente demostración. En caso de que haya un número impar de elementos, he incluido una prueba aquí ${arr[i+1] ? ";" + arr[i+1] : ""} ; de lo contrario, use ${arr[i+1]} , si siempre tiene un número par de elementos.
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'], arrayOutput = arrayInput.reduce( (acc,cur,i,arr) => i % 2 === 0 ? [...acc,`${cur}${arr[i+1] ? ";" + arr[i+1] : ""}`] : acc, [] ); console.log( arrayOutput ); //OUTPUT: ['A;B', 'C;D', 'E;F'];Puede probar algo como esto (implementación basada en reduce de matriz y join ):
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F']; let temp = []; const output = arrayInput.reduce((accumulator, item) => { if (temp.length < 2) { temp.push(item); } else { accumulator.push(temp.join(';')); temp = []; } return accumulator; }, []); console.log(output)