Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625

Поиск в массиве через цикл

14.04.2013, 01:00. Показов 3576. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.

Имеются у нас такие данные:
JavaScript
1
2
3
var str = "A=1111&B=2222&C=3333"; // исходная строка
var str_array = str.split("&"); // разбираем строку и помещаем в массив. Всего в массиве, три элемента
var mask_array = ["A=", "B=", "C="];
Здесь, мы разобрали строку и поместили в массив. Всего в массиве получилось 3 элемента. Так же мы обьявили массив с маской. Вопрос. Как с помощью цикла, найти и удалить элементы в массиве, используя маску?

Я использовал такой вариант, без маски(громоздкий):

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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--;
   }
}
Этот вариант, какой-то громоздкий, как мне показалось. Наверняка можно сделать проще. Используя find() например.

Добавлено через 4 часа 27 минут
Найден оптимальный вариант:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var str = "A=1111&B=2222&C=3333&D=13123";
var str_array = str.split("&");
 
var mask = ["A=", "B=", "C="];
var mask_size = mask.length;
 
for(var i = 0; i < str_array.length; i++) {
      for(var n = 0; n < mask_size; n++) {
          if(str_array[i].indexOf(mask[n]) != -1) {
               str_array.splice(i, 1);
               i--;
               break;
          }
      }
}
Или такой вариант, без дополнительного массива с маской:
JavaScript
1
2
3
4
5
6
7
8
9
var str = "A=1111&B=2222&C=3333&D=13123";
var str_array = str.split("&");
 
for(var i = 0; i < str_array.length; i++) {
    if(str_array[i].indexOf("A=") != -1 || str_array[i].indexOf("B=") != -1 || str_array[i].indexOf("C=") != -1) {
        str_array.splice(i, 1);
        i--;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2013, 01:00
Ответы с готовыми решениями:

Поиск максимального и минимального элементов в массиве за один цикл
Выполните поиск максимального и минимального элементов в массиве за один цикл

Удаление дубликатов в массиве через цикл
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { ...

Выполнить поиск максимального и минимального элементов в массиве за один цикл
Выполнить поиск максимального и минимального элементов в массиве за один цикл. Смог только в два цикла, но в один никак не получается. ...

13
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.04.2013, 10:51
stashappy, задача решается в одну строку.
JavaScript
1
2
var str = "A=1111&B=2222&C=3333"; // исходная строка
var str_array = str.split(/&?[A-Z]=/);
Ну второй строкой ещё можно удалить пустой первый элемент.
0
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
14.04.2013, 14:38  [ТС]
Цитата Сообщение от GuardCat Посмотреть сообщение
stashappy, задача решается в одну строку.
JavaScript
1
2
var str = "A=1111&B=2222&C=3333"; // исходная строка
var str_array = str.split(/&?[A-Z]=/);
Ну второй строкой ещё можно удалить пустой первый элемент.
GuardCat.Вы точно поняли суть задачи? Задача состоит в том, чтобы перебрать элементы в исходном массиве и удалить те элементы, в которых есть совпадения по маске. Заметьте, удалить, а не обрезать.
JavaScript
1
2
var str = "A=1111&B=2222&C=3333"; // эта строка может содержать и большее количество пар ключ=значение
var mask = ["A=", "B=", "C="]; // маска по условию не изменяется
Ваш код, вырезает кличи, и оставляет значения. Но в массив, согласно условию, должны входить пары ключ=значение.
0
 Аватар для Alexdemath
128 / 125 / 39
Регистрация: 11.04.2010
Сообщений: 255
14.04.2013, 17:28
Цитата Сообщение от stashappy Посмотреть сообщение
Задача состоит в том, чтобы перебрать элементы в исходном массиве и удалить те элементы, в которых есть совпадения по маске. Заметьте, удалить, а не обрезать.
Напишите пример массива, маски и того, что должно получиться на выходе.
0
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
14.04.2013, 18:12  [ТС]
JavaScript
1
2
3
4
var str = "A=1111&B=2222&C=3333&D=13123";
var str_array = str.split("&"); // пример массива
var mask = ["A=", "B=", "C="]; // маска
// остается на выходе D=13123
Строка, может быть и такой: "A=1111&B=2222" и такой: "A=1111&B=2222&C=3333&D=13123&E=4444&F=5 5555". Конечный вариант здесь, может быть разным.
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.04.2013, 18:17
Цитата Сообщение от stashappy Посмотреть сообщение
GuardCat.Вы точно поняли суть задачи?
Каюсь — грешен, неверно понял задачу.
Ваш подход с маской в массиве мне кажется неверным. Для этого есть регВыр. Если верно понял со второго раза: есть массив строк вида "A=1928", получить нужно массив без элементов, чья левая часть совпала с маской. Я делал бы так:
JavaScript
1
2
3
4
5
var
  strArr = "A=1111&B=2222&C=3333&D=3432312&E=23213".split("&"),
  maskReg = /[A-C]=/
;
strArr = strArr.filter( function(n) { return maskReg.test(n) } );
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
14.04.2013, 18:21  [ТС]
Каюсь — грешен, неверно понял задачу.
Да нет, ничего страшного. Вариант отличный. Надо протестить...
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.04.2013, 18:25
Пардон,
JavaScript
1
maskReg = /^[A-C]=/
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
14.04.2013, 18:30  [ТС]
GuardCat. Ваш вариант, работает с точностью до наоборот. Он ищет совпадения по регулярному выражению, а все остальное отсекает. Как переделать, чтобы наоборот? И, жаль, что array.filter() не поддерживается IE.
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.04.2013, 18:32
Да что ж такое-то со мной сегодня! Вот так верно:
JavaScript
1
maskReg = /[^A-C]=/
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
14.04.2013, 18:42  [ТС]
Цитата Сообщение от GuardCat Посмотреть сообщение
Да что ж такое-то со мной сегодня! Вот так верно:
JavaScript
1
maskReg = /[^A-C]=/
Этот вариант работает как надо. Отсекает по регулярке, все остальное остается. Но в IE, все же этот вариант работать не будет.
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.04.2013, 18:48
Цитата Сообщение от stashappy Посмотреть сообщение
И, жаль, что array.filter() не поддерживается IE.
С IE10 поддерживается. Для старичков можно костыль на скорую руку соорудить...
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (!("filter" in Array())) {
  Array.prototype.filter = function( callback ) {
    var x, resultArr = [];
    for (x = 0; x < this.length; x++) {
      if ( callback(this[x], x, this) ) {
        resultArr.push( this[x] );
      }
    }
    return resultArr
  }
}
var
  strArr = "A=1111&B=2222&C=3333&D=3432312&E=23213".split("&"),
  maskReg = /[^A-C]=/
;
strArr = strArr.filter( function(n) { return maskReg.test(n) } );
Добавлено через 4 минуты
А для разработки рекомендую вот эту библиотечку. И можно спокойно использовать большую часть современного js.
1
 Аватар для stashappy
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
14.04.2013, 18:51  [ТС]
Вариант отличный. Благодарю. Думаю людям пригодится. Раз уж мы дошли до регулярных выражений... А что если нам надо отсечь, скажем, не "A=, B=, C=", а например "B=, F=, W=". Как переделать регулярку?
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.04.2013, 18:54
Вот так:
JavaScript
1
maskReg = /[^BFW]=/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2013, 18:54
Помогаю со студенческими работами здесь

Поиск совершенного числа N через цикл for
Сложить программу с помощью цикла for Задание Дано некоторое число N. Сложить программу поиска “совершенных” чисел меньших за N....

Найти номер минимального элемента в массиве через цикл
function = seco( D,min,max,Pmin ) =size (D) for k=1:n; max =D(k,1); for j=1:m; if D(k,j)&gt;max ...

Как через цикл обойти вокруг ячейки в двумерном массиве?
Собственно, сабж. Мне нужно изменить значения в массиве char вокруг ячейки. Можно ли так сделать? Желательно с проверкой на выход из...

Поиск максимального элемента заданной последовательности чисел, через цикл Repeat
Поиск максимального элемента заданной последовательности чисел через цикл Repeat. Помогите переделать программу из цикла FOR в REPEAT. ...

Подскажите как реализовать поиск максимального числа через цикл в методе?
Попалась мне задача по поиску максимального числа, сперва я сделал для двух потом для трех. Но это же не дело кому надо находить просто два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru