Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.04.2013, 21:16
Аспирант
Отправить личное сообщение для 1lider Посмотреть профиль Найти все сообщения от 1lider
 
Регистрация: 12.04.2013
Сообщений: 86

Поиск по массиву
Добрый вечер.

Имеются у нас такие данные:
var str = "A=1111&B=2222&C=3333"; // исходная строка
var str_array = str.split("&"); // разбираем строку и помещаем в массив. Всего в массиве, три элемента
var mask_array = ["A=", "B=", "C="]; // маска


Здесь, мы разобрали строку и поместили в массив. Всего в массиве получилось 3 элемента. Так же мы обьявили массив с маской. Каждый элемент маски, по отдельности, должен использваться в поиске по массиву str_array. Вопрос. Как с помощью цикла, найти и удалить элементы в массиве str_array, используя маску? То есть, сначала в str_array ищем "A=", затем "В=", и так далее. У меня есть один вариант, простой, но он слишком громоздкий.

Поможете разобраться?

Последний раз редактировалось 1lider, 13.04.2013 в 21:19.
Ответить с цитированием
  #2 (permalink)  
Старый 13.04.2013, 21:40
Интересующийся
Отправить личное сообщение для Aves Посмотреть профиль Найти все сообщения от Aves
 
Регистрация: 14.12.2011
Сообщений: 12

Если я правильно понял, то из str_array нужно удалить элементы, соответствующие маске? Тогда так:
res = str_array.filter(function(e){return !mask_array.some(function(m){return new RegExp(m).test(e)})})

Останутся только элементы, не соответствующие маске.
Ответить с цитированием
  #3 (permalink)  
Старый 13.04.2013, 21:59
Аспирант
Отправить личное сообщение для 1lider Посмотреть профиль Найти все сообщения от 1lider
 
Регистрация: 12.04.2013
Сообщений: 86

Цитата:
Если я правильно понял, то из str_array нужно удалить элементы, соответствующие маске?
Да, именно так. Кстати, ваш вариант у меня выдает ошибку: Объект не поддерживает это свойство или метод. Все правильно в коде?
Ответить с цитированием
  #4 (permalink)  
Старый 13.04.2013, 22:06
Аспирант
Отправить личное сообщение для Ervin Посмотреть профиль Найти все сообщения от Ervin
 
Регистрация: 19.03.2013
Сообщений: 84

IE 8 Не поддерживает метов Array.filter и Array.some.
Ответить с цитированием
  #5 (permalink)  
Старый 13.04.2013, 22:07
Аспирант
Отправить личное сообщение для 1lider Посмотреть профиль Найти все сообщения от 1lider
 
Регистрация: 12.04.2013
Сообщений: 86

Цитата:
IE 8 Не поддерживает метов Array.filter и Array.some.
Ну вот, опять тупик.
Ответить с цитированием
  #6 (permalink)  
Старый 13.04.2013, 22:19
Аспирант
Отправить личное сообщение для Ervin Посмотреть профиль Найти все сообщения от Ervin
 
Регистрация: 19.03.2013
Сообщений: 84

Совсем нет.
var str = "A=1111&B=2222&C=3333",
     regExp = /(A|B|C)=(\d){1,}(&)?/g
     clearedStr = str.replace(regExp, "");


Если нет нужды работать с массивами.
Ответить с цитированием
  #7 (permalink)  
Старый 13.04.2013, 23:22
Аспирант
Отправить личное сообщение для 1lider Посмотреть профиль Найти все сообщения от 1lider
 
Регистрация: 12.04.2013
Сообщений: 86

Вариант отличный. Но к сожалению, он работает со строкой, а не с массивом. Вот в php хорошо, там например есть встроенная функция in_array();, а в javascript я так понимаю, с этим дело несколько напряжно. У меня есть вот такой вариант решения моей проблемы. Но как я говорил, он громоздкий, но без маски:

var str = "A=1111&B=2222&C=3333";
var str_array = str.split("&");
var size = str_array.length;
for(var i = 0; i < size; i++) {
   if(str_array.indexOf("A=") != -1) {
      str_array.splice(i, 1);
      i--;
      size--;
   }
   if(str_array.indexOf("B=") != -1) {
      str_array.splice(i, 1);
      i--;
      size--;
   }
   if(str_array.indexOf("C=") != -1) {
      str_array.splice(i, 1);
      i--;
      size--;
   }
}
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2013, 23:33
Интересующийся
Отправить личное сообщение для dastingo Посмотреть профиль Найти все сообщения от dastingo
 
Регистрация: 30.01.2013
Сообщений: 29

inArray можно утянуть из jQuery по-быстрому.
1lider,
str_array.indexOf("A=") когда там 'A=1111' -1 же всегда

Последний раз редактировалось dastingo, 13.04.2013 в 23:37.
Ответить с цитированием
  #9 (permalink)  
Старый 13.04.2013, 23:35
Аспирант
Отправить личное сообщение для Ervin Посмотреть профиль Найти все сообщения от Ervin
 
Регистрация: 19.03.2013
Сообщений: 84

var str = "A=1111&B=2222&C=3333&D=13123",
     strArray = str.split("&"),
     toRemove = ["A=", "B=", "C="];

for(var i = 0; i < strArray.length; i++) {
  for(var n = 0, lengN = toRemove.length; n < lengN; n++) {
      if(~strArray[i].indexOf(toRemove[n])) {
           strArray.splice(i, 1);
           i--;
           break;
      }
  }
}
Ответить с цитированием
  #10 (permalink)  
Старый 13.04.2013, 23:36
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

лолчто

var str = "A=1111&B=2222&C=3333"; // исходная строка
var str_array = str.split("&"); // разбираем строку и помещаем в массив. Всего в массиве, три элемента
var mask_array = ["A=", "B=", "C="]; // маска

for (i=0;i<str_array.length;i++) {
   str_array[i] = str_array[i].replace(mask_array[i], "");
}

alert(str_array)
__________________
оляля, ололо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Профессиональный поиск по массиву RazZzeR Элементы интерфейса 14 10.06.2012 13:07
Поиск по многомерному массиву Ultimatum Общие вопросы Javascript 12 20.11.2011 14:53
поиск по массиву zebulun Общие вопросы Javascript 4 02.09.2011 02:09
Поиск в тексте javascript jQuery 3 31.05.2011 11:40
PagingToolbar и поиск DenQ ExtJS 5 02.11.2010 00:16