Digamos que tengo una matriz con los siguientes contenidos: "@@@Some Text###","@@@More Text###","@@@Even more Text###","@@@Even Even More Text###"

Y quería eliminar todas las instancias de @@@ y ###. Intenté hacer esto con la siguiente función, pero la matriz devuelta es exactamente la misma, como se ve en este fiddle:

function removeText(start, end, array) {
    var newArray = [];
    for (var i = 0; i < array.length; i++) {
        var text = array[i];
        text.split(start).join("");
        text.split(end).join("");
        newArray.push(text);
    }

    return newArray;
}

Supongo que hay una razón muy simple por la que no puedo hacer que esto funcione, por lo que agradecería cualquier ayuda. ¡Gracias!

-1
Alex Wulff 8 may. 2016 a las 17:29

3 respuestas

La mejor respuesta

El método de división no modifica la cadena original, en su lugar, devuelve un nuevo valor, así que asegúrese de reasignarlo al texto para que realmente esté modificando la instancia array[i]:

text = text.split(start).join("");
text = text.split(end).join("");

Y aquí está su updated fiddle.

2
Darin Dimitrov 8 may. 2016 a las 14:32

¿Qué tal dado:

var myArray = [
      "@@@Some Text###",
      "@@@More Text###",
      "@@@Even more Text###",
      "@@@Even Even More Text###"];

Entonces podrías

myArray = myArray.map(function(item){
    return item.replace("@@@", "").replace("###", "");
});
0
JonSG 8 may. 2016 a las 15:38

En JS moderno:

function removeText(start, end, array) {
  let regexp = new Regexp(`^${start}|${end}$`, 'g');
  return array.map(elt => elt.replace(regexp, '');
}

En el mundo real, querrás escapar de start y end para tratar el caso en el que contienen caracteres mágicos de expresión regular.

0
user663031user663031 8 may. 2016 a las 16:49