Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 21.03.2013, 13:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

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

function findPartial(a, s) {
    while (s) {
        var reg = new RegExp(s)
        for (var i = 0; i < a.length; i++)
            if (reg.test(a[i])) return i;
        s = s.slice(0, -1)

    }

    return -1;
}

alert(findPartial(massiv, "яблокo"));
Ответить с цитированием
  #12 (permalink)  
Старый 21.03.2013, 13:45
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от rgl
dmitriymar,
Из вопроса, а также из приведенного примера можно предположить, что под частичным совпадением понимается вхождение:
Сообщение от фонарик Посмотреть сообщение
Подскажите пожалуйста, как проверить есть ли элемент в массиве, используя в поиске часть его имени?.....
Здесь больше к терминологии:
Полное вхождение
Частичное вхождение
Полное совпадение
Частичное совпадение - http://ru.wikipedia.org/wiki/%D0%A0%...B9%D0%BD%D0%B0 чем меньше расстояние тем выше частичное совпадение совпадение .

В вашем же случае , находится полное вхождение

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


тоже такой момент, и почемуто мне кажется что искомое вхождение всё таки больше похоже на 1 или 3 элемент поискового подмножества

Последний раз редактировалось dmitriymar, 21.03.2013 в 14:03.
Ответить с цитированием
  #13 (permalink)  
Старый 21.03.2013, 13:51
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

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

function findPartial( a, s )
{
  var i;
  if( s.length > 3 ) {
    i = s.length - 3;
    var r = s.substr( i, 3 );
    while( --i >= 0 )
      r += "|" + s.substr( i, 3 );
    r = new RegExp( r );
    for( i = 0; i < a.length; ++i )
      if( r.test( a[i] ) )
        return i;
  } else {
    for( i = 0; i < a.length; ++i )
      if( a[i].indexOf( s ) >= 0 )
        return i;
  }
  return -1;
}

alert( findPartial( massiv, "острота" ) );
Ответить с цитированием
  #14 (permalink)  
Старый 21.03.2013, 13:55
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

rgl,
http://www.snippy.ru/snippet/1634-an...na-javascript/
и естественно победитель с минимальным расстоянием , алгоритм используется активно и очень плотно
Ответить с цитированием
  #15 (permalink)  
Старый 21.03.2013, 13:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от dmitriymar
3 элемент поискового подмножества
где вы увидели 3? 3элемент это как раз 2 индекс
Ответить с цитированием
  #16 (permalink)  
Старый 21.03.2013, 13:59
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

рони,
да , запарился . в любом случае вариант на расстояниях решение гораздо правильнее
Ответить с цитированием
  #17 (permalink)  
Старый 21.03.2013, 14:00
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

рони,
Все классно и круто, только не понятно зачем сначала искать более длинную часть, если все равно все определяется тем, найдется ли более короткая. Т.е. можно сразу искать только первую букву. Да и регэкспы без необходимости использовать зачем?
Ответить с цитированием
  #18 (permalink)  
Старый 21.03.2013, 14:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от rgl
если все равно все определяется тем, найдется ли более короткая.
в каком месте? поиск прекратится на самом большом совпадении
Ответить с цитированием
  #19 (permalink)  
Старый 21.03.2013, 14:05
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

рони,
поправил тест . Сможете обосновать почему соус более релевантен чем яблоко?) яблоко ведь стоит в начале слова , и вполне логично , что более подходящий вариант связан с яблоком для стран с письменностью слева направо

Последний раз редактировалось dmitriymar, 21.03.2013 в 14:07.
Ответить с цитированием
  #20 (permalink)  
Старый 21.03.2013, 14:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от rgl
Да и регэкспы без необходимости использовать зачем?
а как без них?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск HTMLElement'а в массиве z700i Общие вопросы Javascript 15 07.01.2012 21:13
Поиск в тексте javascript jQuery 3 31.05.2011 11:40
Поиск вхождения подстроки в массиве строк. FINoM Общие вопросы Javascript 8 27.02.2011 11:53
Поиск в двумерном массиве Vamp Общие вопросы Javascript 2 16.07.2009 13:05
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31