29 mayo, 2023

ELIMINAR EN UN RANGO SELECCIONADO TODAS LAS OCURRENCIAS DE UN ITEM Y DERRAMAR EL RESULTADO EN UNA FUNCIÓN

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.

Donate Button with Credit Cards

¡¡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

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies