JQuery Javascript массив «содержит» функциональность? - PullRequest
2 голосов
/ 07 апреля 2010

Я пытаюсь использовать функцию jQuery $.inArray для итерации массива, и если есть элемент с текстом contains определенного ключевого слова, удалите этот элемент.$.inArray возвращает только индекс массива, хотя, если текст элемента equal для ключевого слова.

Например, для следующего массива с именем 'tokens':

-   tokens  {...}   Object
    [0] "Starbucks^25^http://somelink"  String
    [1] "McDonalds^34^" String
    [2] "BurgerKing^31^https://www.somewhere.com"   String

Ивызов removeElement(tokens, 'McDonalds'); вернет следующий массив:

 -  tokens  {...}   Object
    [0] "Starbucks^25^http://somelink"  String
    [1] "BurgerKing^31^https://www.somewhere.com"   String

Я предполагаю, что это может быть возможно с помощью функции jQuery $.grep или $.each, или, возможно, regex.Тем не менее, я не достаточно знаком с jQuery, чтобы сделать это.

Буду признателен за любую помощь!

Ответы [ 3 ]

4 голосов
/ 07 апреля 2010

grep действительно путь.

function removeElement(array, keyword) {
    return $.grep(array, function (item, i) {
      return item.indexOf(keyword) > -1;
  }, true);
}

Это ищет ключевое слово как подстроку. Если элементы массива имеют определенный формат (которым они кажутся, но он точно не указан), измените тест для соответствия формату.

function removeElement(array, keyword) {
    var keyRE=new RegExp('^'+keyword+'^');
    return $.grep(array, function (item, i) {
      return keyRE.test(item);
  }, true);
}

Обратите внимание, что первый '^' является метасимволом, совпадающим с началом строки; второй просто соответствует символу '^'.

0 голосов
/ 07 апреля 2010

Это должно быть понятно само по себе. Удаляет все элементы из параметра tokens, которые содержат строку, переданную в параметре search. Использование фильтра ()

function removeElement(tokens, search) {
    var regex = new RegExp(search);
    return $(tokens).filter(function() {
        return !regex.test(this);
    }).toArray();
}

Если вы хотите, вы также можете указать флаги для регулярного выражения

1010 *, например *

var regex = new RegExp(search, "i");

Удаляет все элементы, содержащие строку поиска, регистр игнорируется


$.grep версия кода

function removeElement(tokens, search) {
    var regex = new RegExp(search);
    return $.grep(tokens, function(elem, ind) {
        return regex.test(elem);
    }, true);
}
0 голосов
/ 07 апреля 2010

edit упс, я совершенно не понял вопроса.

Ну $.grep принимает флаг «инвертирования», так что вы можете использовать его напрямую:

var pattern = /\bword\b/;
var newArray = $.grep(oldArray, function(e) { return pattern.test(e); }, true);

Конечно, теперь, когда я думаю об этом, я могу сохранить 5 символов:

var newArray = $.grep(oldArray, function(e) { return !pattern.test(e); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...