Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск в массиве, частичное совпадение (https://javascript.ru/forum/misc/36600-poisk-v-massive-chastichnoe-sovpadenie.html)

фонарик 21.03.2013 10:54

Поиск в массиве, частичное совпадение
 
Подскажите пожалуйста, как проверить есть ли элемент в массиве, используя в поиске часть его имени? Например, есть массив
var massiv = ["яблочный пирог", "соус_острый", "яблоки_красные"]
как проверить, есть ли в массиве элемент с частичным совпадением "яблок", и получить его номер в массиве?

dmitriymar 21.03.2013 11:07

Цитата:

Сообщение от фонарик
как проверить, есть ли в массиве элемент с частичным совпадением "яблок", и получить его номер в массиве?

написать регулярку для частичного совпадения. пройтись по массиву (пребором в цикле, форичем- неважно) в случае совпадения , вернуть, запомнить индекс

рони 21.03.2013 11:08

фонарик,
а если элементов совпавших не 1 который выдавать?

фонарик 21.03.2013 11:14

Цитата:

Сообщение от рони (Сообщение 241819)
а если элементов совпавших не 1 который выдавать?

Совпадений больше 1 быть не может.

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

dmitriymar 21.03.2013 11:17

Цитата:

Сообщение от фонарик
Пытался найти в гугле что-то на эту тему, но кроме обычного поиска по массиву, ничего не нашел. Регулярные выражения никак не даются в понимании, да и ранее подобной задачи никогда не встречал

можно ещё так : http://ru.wikipedia.org/wiki/%D0%A0%...B9%D0%BD%D0%B0
а в рнр вообще есть функция для вычисления расстояния

rgl 21.03.2013 11:47

var massiv = ["яблочный пирог", "соус_острый", "яблоки_красные"];

function findPartial( a, s )
{
  for( var i = 0; i < a.length; ++i )
    if( a[i].indexOf( s ) >= 0 )
      return i;
  return -1;
}

alert( findPartial( massiv, "яблок" ) );

фонарик 21.03.2013 11:54

Мсье rgl, спасибо вам за решение, надеюсь я все-таки смогу понять как оно работает. Да и регулярных выражений вроде как и нет :-?

dmitriymar 21.03.2013 13:07

var massiv = ["яблочный пирог", "соус_острый", "яблоки_красные"];
 
function findPartial( a, s )
{
  for( var i = 0; i < a.length; ++i )
    if( a[i].indexOf( s ) >= 0 )
      return i;
  return -1;
}
 
alert( findPartial( massiv, "яблокo" ) );

Цитата:

Сообщение от фонарик
как проверить, есть ли в массиве элемент с частичным совпадением "яблок", и получить его номер в массиве?

rgl, Ну и ? Почему не выводит элемент с частичным совпадением?

rgl 21.03.2013 13:26

dmitriymar,
Из вопроса, а также из приведенного примера можно предположить, что под частичным совпадением понимается вхождение:
Цитата:

Сообщение от фонарик (Сообщение 241815)
Подскажите пожалуйста, как проверить есть ли элемент в массиве, используя в поиске часть его имени?

Если же понимать по-вашему, то надо сначала определиться сколько букв должно совпадать, чтобы это уже считалось частичным совпадением. Одной достаточно?

Я понял вопрос именно так (вхождение), единственное, в чем сомневался, так это искать везде или строго в начале. Если нужно строго вначале, то проверку >= 0 можно заменить на == 0

фонарик 21.03.2013 13:42

Частичное совпадение я обозначил весьма буквально - выражение в кавычках "яблок". Т.е нужно значение что в кавычках проверить нет ли точных совпадений в массиве, т.е елемента в котором есть все символы что в кавычках. Решение rgl то, что и хотелось в итоге получить :)


Часовой пояс GMT +3, время: 02:23.