Hola a todos,
Hace unos días publicaba en este post: ELIMINAR TODAS LAS OCURRENCIAS DE UN ELEMENTO EN UN ARRAY CON TYPESCRIPT, cómo podíamos eliminar una ocurrencia en un array (previamente seleccionado en un rango) utilizando un loop para verificar cada uno de los items de esa selección.
Pues bien, un lector me ha pedido si podría utilizar la salida en forma de matriz derramada en lugar de ser una string delimitada por comas. La respuesta es que sí, simplemente tendremos que tratarlo en la salida como una matriz. En el ejemplo utilizaríamos esto:

Cómo podéis observar hemos seleccionado el 25 como elemento para eliminar del rango y el nuevo rango derramado ya no muestra ese número.
/**
* @customfunction
* @param {string[][]} miRango
* @returns {string[][]}
*/
function delItem_meth_1(miRango, item) {
//pasamos el rango seleccionado a un array
miRango = miRango.toString().split(",");
//eliminamos el elemento indicado
function elimina_todo(miRango, value) {
var i = 0;
while (i < miRango.length) {
if (miRango[i] === item) {
miRango.splice(i, 1);
} else {
++i;
}
}
}
elimina_todo(miRango, item);
let sCadena= miRango.join(',');
let resultado = miRango.join(',').toString().split(",");
return [resultado]
};
Y podríamos eliminar toda la cadena si se tratase de un único ítem:

Aprovechando que he estado trabajando esta función he probado a crear otra que haga el mismo trabajo y lo he conseguido. He utilizado la función replace(), para evitar la iteración del loop.
Esta sería la otra función:
/**
* @customfunction
* @param {string[][]} miRango
* @returns {string[][]}
*/
function delItem_meth_2(miRango, miItem) {
//si no seleccionamos nada añadimos un espacio
if (miItem == "") { miItem = " " }
//Convertimos en matriz
miRango = miRango.toString().split(',');
//componemos nueva cadena + coma al final
let sCadena = miRango.join(',') + ',';
//reemplazamos el item seleccionado
let nItem = new RegExp(miItem + ',', "g");
let reemplaza = sCadena.replace(nItem, '');
//eliminamos última coma
let nCadena = reemplaza.substring(0, reemplaza.length - 1);
//pasamos resultado a matriz y derramos datos
let resultado = nCadena.toString().split(",");
return [resultado]
};
Aquí podéis ver cómo utilizo la función replace() y una sería de arreglos que voy realizando para tratar la cadena de texto con las comas y el paso a la matriz resultante. Simplemente es otra forma de hacer este trabajo, el resultado es el mismo (en todas las pruebas que he realizado).

Y esto es todo!,
Espero que sea de utilidad!!.
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies