Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Multiple <placeholder> text substitutions using a JS map and reduce() with initial value (+other methods).
/**
* Multiple <placeholder> text substitutions
* using a JS map data type and reduce() with initial value (+other methods)
*/
function globalTextSubst(){
// Some sample data
const alumno = 'Juan Rebote';
const ciclo = 'Gestión de ventas y espacios comerciales';
const curso = '20/21';
const fecha = '15/03/21';
const grupo = 'Primero';
const modalidad = 'Semipresencial';
const modulo = '(MD) Marketing Digital';
const recupera = 'Final';
const emailP = 'pablo@correo.es';
const profesor = 'Pablo F.';
// Map definition
const marcadores = new Map(
[
['ALUMNO',''],
['CICLO',''],
['CURSO',''],
['FECHA',''],
['GRUPO',''],
['MODALIDAD',''],
['MODULO',''],
['RECUPERA',''],
['PROFEMAIL',''],
['PROFESOR', '']
]
);
// Map instantiation
marcadores.set('ALUMNO', alumno);
marcadores.set('CICLO', ciclo);
marcadores.set('CURSO', curso);
marcadores.set('GRUPO', grupo);
marcadores.set('MODALIDAD', modalidad);
marcadores.set('MODULO', modulo);
marcadores.set('RECUPERA', recupera);
marcadores.set('PROFEMAIL', emailP);
marcadores.set('PROFESOR', profesor);
marcadores.set('FECHA', fecha);
// Pull body text from email template
const hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Email');
let cuerpo = hoja.getRange('B8').getValue();
console.info(cuerpo);
// Replace all placeholders!
cuerpo = Array.from(marcadores).reduce((texto, marcador) => texto.replace(`<${marcador[0]}>`, marcador[1]), cuerpo);
// *5* other variants, the last two are probably simpler 👇
// cuerpo = Array.from(marcadores.entries()).reduce((texto, marcador) => texto.replace(`<${marcador[0]}>`, marcador[1]), cuerpo);
// for (let marcador of marcadores.keys()) cuerpo = cuerpo.replace(`<${marcador}>`, marcadores.get(marcador));
// for (let marcador of marcadores) cuerpo = cuerpo.replace(`<${marcador[0]}>`, marcador[1]);
// for (let [marcador, texto] of marcadores) cuerpo = cuerpo.replace(`<${marcador}>`, texto);
// marcadores.forEach((texto, marcador) => cuerpo = cuerpo.replace(`<${marcador}>`, texto));
console.info(cuerpo);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment