Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Помогите с поиском в масиве (https://javascript.ru/forum/dom-window/50795-pomogite-s-poiskom-v-masive.html)

Eugenee 11.10.2014 23:21

Помогите с поиском в масиве
 
В общем есть код:
var text="Eugene Yevgen Oksai, Olesya, Yevgen";
myName="Yevgen";
hits=[];
for (i=0;i<=text.length;i++){
    if (text[i]==='Y'){
        for(j=i; j< (i+ myName.length);j++){
            hits.push(""+text[j]+"")}}    
        }
if (hits!=0){
        console.log(hits);}
        else console.log("Your name wasn`t found");

который выводит:
["Y", "e", "v", "g", "e", "n", "Y", "e", "v", "g", "e", "n"]
нужно что б выводило:
[Yevgen, Yevgen] or [Yevgen Yevgen] or idialy: Yevgen, Yevgen
У кого нибудь есть идеи, подскажите плз:thanks:

рони 12.10.2014 00:00

:cray:
var text = "Eugene Yevgen Oksai, Olesya, Yevgen",
      myName = "Yevgen",
      hits = [];
  for (i = 0; i < text.length; i++) {
      if (text[i] === 'Y') {
          var str = '';
          for (j = i; j < (i + myName.length); j++) {
              str += text[j]
          };
          hits.push(str)
      }
  }

  if (hits.length) alert(hits);

Eugenee 12.10.2014 00:22

В принципе просто, но я б сам не догадался, спасибо огромное!

Vlasenko Fedor 12.10.2014 01:05

честно не понятно логика ваших действий. Потому как результат можно и так получить
var text = "Eugene Yevgen Oksai, Olesya, Yevgen",
      myName = /Yevgen/g;
      alert(text.match(myName));

Eugenee 12.10.2014 05:04

Цитата:

Сообщение от Poznakomlus (Сообщение 334950)
честно не понятно логика ваших действий. Потому как результат можно и так получить
var text = "Eugene Yevgen Oksai, Olesya, Yevgen",
      myName = /Yevgen/g;
      alert(text.match(myName));

та логика тут проста, я массивы учу, на codecademy попалась задачка ответа к которой я не знал...
Спасибо, за упрощенный код, у меня следующий вопрос, что это за присвоение такое:
myName = /Yevgen/g;

Или где о нем можно прочитать?

kostyanet 12.10.2014 05:32

Вот так

var legal_names = 'Eugene|Yevgen|Oksa|Olesya|Yevgen';

var reg = new RegExp('^(?:'+legal_names+')$');

var matched = 'Oksa'.match(reg);

console.log(matched); // Array['Oksa']


Disclaimer: не я придумал, я нашел и у себя применяю вместо поиска в массиве литералов. Для тех кто еще юзает массивы:

private static function is_input($name) {
		return preg_match('/^(?:button|checkbox|color|date|datetime|datetime-local|email|file|hidden|image|month|number|password|radio|range|reset|search|submit|tel|text|time|url|week)$/',$name);
	}

Vlasenko Fedor 12.10.2014 19:45

Цитата:

Сообщение от Eugenee
я массивы учу,

Цитата:

Сообщение от Eugenee
что это за присвоение такое

http://javascript.ru/String/match
http://javascript.ru/RegExp

danik.js 12.10.2014 20:00

kostyanet, че у тя за функция такая is_input? Ты будешь до конца своих дней поддерживать ее и обновлять список типов по мере их появления? :)

kostyanet 13.10.2014 09:40

Это у меня еще нет функции is_bool_attr, там на полстраницы атрибутов которые отвечают шаблону "без валуе".

На самом деле не так. Это же не опенсорц, чтобы кто хочет тот писал что угодно. Тут кто хочет тот пишет что можно. Сегодня я добавил туда тип captcha.

ПОтому что инпуты бывают void, а бывают не пустые. ЧТобы унифицировать тип инпута, чтобы равнозначно писать и

->type('text')

и

->type('textarea')

и

->type('select')

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

kostyanet 13.10.2014 09:43

Кстати, а какого члена ФФ рисует в своем инспекторе элементов инпуты вот так

<input type="text"></input>

Я потратил 10 минут в поисках бага в скрипте, пока допер посмотреть хтмл-сам. Там все было правильно, как w3c.org завещал.


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