así que tengo una lista var be = ["Hello", "welcome", "Hi", "morning", "Hi"]
y quiero unir las cadenas si la cadena final no supera las 12.
por lo que el resultado final debe ser una lista: ["Hello--welcome", "Hi--morning--Hi"] // I need the -- included
Intenté usar expresiones regulares uniéndolas en una cadena grande y luego usando .match pero no funcionó.
EDITAR:
esto es lo que probé:
var s = ["Hello", "welcome", "Hi", "morning", "Hi"].join("--") var result = s.match(/.{1,12}/g) // ['Hello--welco', 'me--Hi--morn', 'ing--Hi']
Gracias
Array#reduce
, itere sobre la matriz mientras actualiza una lista de objetos con matriz de words
y total
(longitud total de palabras). En cada iteración, verifique si agregar la cadena actual al último objeto agregado excedería un "MAX_LENGTH", si no lo actualiza, de lo contrario, agregue un nuevo objetoArray#map
y Array#join
, devuelve la lista de palabras unidas const arr = ["Hello", "welcome", "Hi", "morning", "Hi"], MAX_LENGTH = 12; const res = arr.reduce((list, str) => { const last = list[list.length-1]; if(last && last.total + str.length <= MAX_LENGTH) { last.total += str.length; last.words.push(str); } else { list.push({ total: str.length, words: [str] }); } return list; }, []) .map(({ words }) => words.join('--')); console.log(res);