2010-09-07 5 views
0

Поэтому у меня есть массив JavaScript собирается несколько, какJS: Удалить элемент из массива на основе RegExp

  • завинчивающейся крышкой бутылки
  • nonreturnable бутылки магнум пустой
  • бак
  • дайвинг [тек.] магнитная бутылка [текли.]
  • нерушимых бутылки
  • полных
  • бак
  • плавание
  • Материал (5 из 5)
  • Flasche austrinken сделайте Ein младенца мит
  • дер Flasche ernähren Эйн младенца мит
  • дер Flasche füttern Mit дер Flasche
  • aufziehen

Моя проблема - элемент «Материал (5 из 5)». В принципе, я не хочу, чтобы это отображалось в массиве. Это не было бы большой проблемой, если бы она всегда была одинаковой, но массив генерируется динамически, а числа за отличаются. Так, например, на момент времени это «Материал (2 из 3)», в другой раз «Материал (6 из 6)» и так далее и так далее. Первая часть остается прежней.

Итак, я думал, что регулярные выражения разрешат проблему как таковую, на что они предназначены. Так я взломал вместе этот код:

var regExpStuff = /Stuff\b/; 
var array = removeItem(unique, regExpStuff); 

Функция RemoveItem() выглядит следующим образом:

//remove item (string or number) from an array 
    function removeItem(originalArray, itemToRemove) { 
     var j = 0; 
     while (j < originalArray.length) { 
      if (originalArray[j] == itemToRemove) { 
       originalArray.splice(j, 1); 
     } else { j++; } 
    } 
    return originalArray; 
    } 

Функция отлично работает с простыми строками, как «строка», но это не делает сюда.
Любые идеи, что может быть неправильным? Помощь высоко ценится,

Бенни

ответ

2

Когда вы пишете if (originalArray[j] == itemToRemove), вы проверяете ли originalArray[j] является равно параметра. Поскольку строка "# Stuff (5 of 5)" не равна вашему регулярному выражению (в конце концов, это строка, а не регулярное выражение), вы ничего не удаляете.

Вам нужно изменить метод проверки регулярного выражения.
Например:

function removeMatching(originalArray, regex) { 
    var j = 0; 
    while (j < originalArray.length) { 
     if (regex.test(originalArray[j])) 
      originalArray.splice(j, 1); 
     else 
      j++; 
    } 
    return originalArray; 
} 
+0

удивительным, спасибо! – ngmir

1

здесь представляет собой графическое решение Вытащите элементов я хотел бы видеть, как все меняется

<!DOCTYPE html> 
<html> 
<body> 
<button onclick="myFunction()">Try it</button> 
<p id="demo"></p> 
<script> 
function myFunction() { 
    var fruits= ["Banana", "Orange", "Lemon", "Apple", "Mango"]; 
    for (var i=0;i<fruits.length;i++){ 

    if(fruits[i] == "Lemon"){ //remove Lemon 
     var citrus = fruits.splice(i,1); 
     i--; 
    } 
    if(fruits[i] == "Apple"){ //remove Apple 
     var citrus = fruits.splice(i,1); 
     i--; 
    } 
    document.getElementById("demo").innerHTML = fruits+'<br>'+citrus; 
} 
} 
</script> 
</body> 
</html> 
Смежные вопросы