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

rgl 21.03.2013 14:08

Цитата:

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

Кста, ТС уточнил, что ситуация, когда больше одного совпадения, невозможна, либо есть ровно одно совпадение, либо нет ни одного. А значит нет смысла сравнивать, какое совпадение больше похоже, а какое меньше. Более сложная задача требует более сложного решения, а вычисление степени совпадения (или как там его, расстояния) - задача не для JavaScript, средства языка не позволяют эффективно, т.е. на таком языке, как напр. С решение будет работать на порядок, если не на два, быстрее.

rgl 21.03.2013 14:10

Цитата:

Сообщение от рони (Сообщение 241866)
а как без них?

String.indexOf, String.lastIndexOf
Цитата:

Сообщение от рони (Сообщение 241861)
в каком месте? поиск прекратится на самом большом совпадении

Да, не обратил внимания сразу.

рони 21.03.2013 14:11

Цитата:

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

ничего не понял - где чего поправлено ... какой соус ... :blink:

фонарик 03.04.2013 20:16

Цитата:

Сообщение от rgl (Сообщение 241830)
var massiv = ["яблочный пирог","соус_острый_1","яблоки_красные","соус_острый_8"];

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, "соус_острый" ) );

Я реализовал в своей задаче скрипт что выше, который написал мсье rgl. Он прекрасно работает для нужного мне поиска. Подскажите пожалуйста, как изменить данный скрипт так, чтобы в итоге в алерте увидеть все номера индексов найденных совпадений? Т.е в данном случае, необходимо получить индексы [1] и [3].

фонарик 03.04.2013 22:24

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

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

alert( findPartial( massiv, "соус_острый" ) )
Вроде работает ))

rgl 04.04.2013 07:43

Цитата:

Сообщение от фонарик (Сообщение 244180)
var massiv = ["яблочный пирог","соус_острый_1","яблоки_красные","соус_острый_8"];

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

alert( findPartial( massiv, "соус_острый" ) )
Вроде работает ))

В какой-то из умных книжек (не помню в какой) написано что-то вроде "есть только одна вещь хуже отсутствия отступов - неправильные отступы"
var massiv = ["яблочный пирог","соус_острый_1","яблоки_красные","соус_острый_8"];

function findPartial(a, s)
{
  var zz = []
  for( var i = 0; i < a.length; ++i )
    if( a[i].indexOf(s) >= 0 )
	  zz.push(i)	  
  return zz // тут отсутп был неправильный, ибо выполняется всегда, а не внутри if
  // return -1; //а это вообще никогда не выполняется
}

alert( findPartial( massiv, "соус_острый" ) )


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