Tengo una cadena con este contenido que se divide en una matriz:
var CLI = "STRING1 28 1.0\nSTRING2 26 0.5\nSTRING3 2 2.0\nSTRING4 5 1.0"; var CLIarr = CLI.toString().split("\n"); CLIarr[i] = CLIarr[i].toString().split(" ");La salida se puede generar así:
for (i = count; i < CLIarr.length; i++) { console.log(CLIarr[i][0]+' '+CLIarr[i][1]+' '+CLIarr[i][2]+'\n'); }Producción:
STRING1 28 1.0 STRING2 26 0.5 STRING3 2 2.0 STRING4 5 1.0¿Cómo fusiono STRING3 y STRING4 para que el resultado se vea así?
Información: 2+5=7 y (2.0+1.0)/2=1.5
STRING1 28 1.0 STRING2 26 0.5 MERGED 7 1.5Información
Las CADENA en la salida CLI pueden aparecer en otro orden. La salida CLI puede no contener ninguna de las dos cadenas (STRING3, STRING4) o solo STRING3 o solo STRING4. Si ninguna de las CADENA es parte de la salida CLI, entonces no se requiere la combinación. Si solo STRING3 o STRING4 son parte de la salida CLI, simplemente deben reescribirse en STRING5 y luego eliminarse de la matriz.
Debe analizar la parte numérica de su cadena como int con parseInt() o float con parseFloat() para poder realizar cualquier operación matemática, porque actualmente se trata como string .
Puede filtrar la matriz de líneas y agregar líneas deseadas.
const getMerged = ([a, b, count]) => count ? ['MERGED', a, b / count].join(' ') : [], CLI = "STRING1 28 1.0\nSTRING2 26 0.5\nSTRING3 2 2.0\nSTRING4 5 1.0", add = ['STRING3', 'STRING4'], merged = [0, 0, 0], result = CLI .split('\n') .filter(s => { const [type, a, b] = s.split(' '); if (!add.includes(type)) return true; merged[0] += +a; merged[1] += +b; merged[2]++; }) .concat(getMerged(merged)); console.log(result);Basado en el fantástico trabajo de @Nina Scholz, he podido crear la respuesta final a mi demanda, que se ve así:
const getMerged = ([a, b, count]) => ['MERGED', a, (b / count).toFixed(1)].join(' '), CLI = "STRING1 28 1.0\nSTRING2 26 0.5\nSTRING3 2 2.0\nSTRING4 5 1.0", add = ['STRING3', 'STRING4'], merged = [0, 0, 0]; var result = CLI.split('\n').filter(s => { const [type, a, b] = s.split(' '); if (!add.includes(type)) return true; merged[0] += +a; merged[1] += +b; merged[2]++; }); if (merged[2] != 0) { result = result.concat(getMerged(merged)); } console.log(result);