Поиск по массиву
Добрый вечер.
Имеются у нас такие данные:
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=", затем "В=", и так далее. У меня есть один вариант, простой, но он слишком громоздкий. Поможете разобраться? |
Если я правильно понял, то из str_array нужно удалить элементы, соответствующие маске? Тогда так:
res = str_array.filter(function(e){return !mask_array.some(function(m){return new RegExp(m).test(e)})})
Останутся только элементы, не соответствующие маске. |
Цитата:
|
IE 8 Не поддерживает метов Array.filter и Array.some.
|
Цитата:
|
Совсем нет.
var str = "A=1111&B=2222&C=3333",
regExp = /(A|B|C)=(\d){1,}(&)?/g
clearedStr = str.replace(regExp, "");
Если нет нужды работать с массивами. |
Вариант отличный. Но к сожалению, он работает со строкой, а не с массивом. Вот в 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--;
}
}
|
inArray можно утянуть из jQuery по-быстрому.
1lider, str_array.indexOf("A=") когда там 'A=1111' -1 же всегда |
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;
}
}
}
|
лолчто
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)
|
| Часовой пояс GMT +3, время: 13:20. |