2016-05-08 2 views
-1

Скажем, у меня есть массив со следующим содержанием: "@@@Some Text###","@@@More Text###","@@@Even more Text###","@@@Even Even More Text###"Удалить все экземпляры строки в массиве Javascript

И я хотел, чтобы удалить все экземпляры @@@ и ###. Я пытался сделать это с помощью следующей функции, но возвращаемый массив точно так же, как показано в этом 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; 
} 

Я предполагаю, что есть некоторые очень простой причине, что я не могу получить эту работу , поэтому любая помощь будет оценена по достоинству. Благодаря!

+0

Я думаю, что в этом случае вам лучше использовать Replace вместо Split, см. Реализацию здесь: http://www.w3schools.com/jsref/jsref_replace.asp –

+0

Предполагаю, вы отлаживали это. Пройдите через свой код по строкам. Например, после перехода по строке 'test.split (start) .join (" ");', проверьте переменную 'test' и посмотрите, каково ее значение. –

+0

В вашем вопросе говорится «удалить все экземпляры». Но ваше имя переменной использует 'start' и' end'. Вы хотите удалить их только в начале и в конце или повсюду? –

ответ

2

Раскол метод не изменяет исходную строку, вместо этого он возвращает новое значение, поэтому убедитесь, что вы переназначить его в текст, так что вы на самом деле изменения array[i] экземпляра:

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

И вот ваш updated fiddle.

+0

Отлично, вот и все. Благодаря! (Я соглашусь, как только смогу). –

0

Как насчет Дано:

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

Тогда вы можете

myArray = myArray.map(function(item){ 
    return item.replace("@@@", "").replace("###", ""); 
}); 
+1

Это заменит '@@@ и' ###' в любом месте строки. Возможно, вам будет лучше с заменой (/^@@@ | ### $ /, '') '. –

+0

Хороший момент, хотя OP заявила: «Я хотел удалить все экземпляры @@@ и ###», но я согласен, ваше регулярное выражение, вероятно, то, что они хотели – JonSG

0

В современных JS:

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

В реальном мире вы хотели бы избежать start и end дело с случаем, когда они содержат волшебные символы регулярного выражения.

Смежные вопросы