Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.02.2011, 04:35
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Поиск вхождения подстроки в массиве строк.
Хотелось бы более оптимальное решение, чем использование цикла. indexOf с регуляркой в качестве аргумента не работает .
Ответить с цитированием
  #2 (permalink)  
Старый 25.02.2011, 09:13
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от FINoM
indexOf с регуляркой в качестве аргумента не работает
В каком смысле не работает? Сломался чёле?
Ответить с цитированием
  #3 (permalink)  
Старый 25.02.2011, 09:32
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Цитата:
В каком смысле не работает? Сломался чёле?
При попытке засунуть в indexOf регэксп он преобразуется в строку и поиск не даёт верного результата.

alert("Hello, world!".indexOf(/\w/));


Не зря же придумали String.prototype.search.

FINoM, а что тут такого сложного? Цикл + search/indexOf.
Ответить с цитированием
  #4 (permalink)  
Старый 25.02.2011, 09:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от FINoM
Хотелось бы более оптимальное решение, чем использование цикла
Х/з про оптимальность... Но вариант без цикла.

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
</style>
<script>
	var of={}
	var re=/bbb/
function Go() {
	var a=['aaa','bbb','ccc']
	a.sort(aFind)
	var i
	for (i in of) {
		alert(i)
	}
}
function aFind(A,B) {
	if (A.search(re)!=-1) {
		of[A]=0
	}
	return 0
}
</script>
</head>
<body>
<input type='button' value='Go' onclick='Go()' />
</body>
</html>

Последний раз редактировалось ksa, 25.02.2011 в 09:53.
Ответить с цитированием
  #5 (permalink)  
Старый 26.02.2011, 23:21
Аспирант
Отправить личное сообщение для Questioner Посмотреть профиль Найти все сообщения от Questioner
 
Регистрация: 03.02.2011
Сообщений: 80

Matre,
че значит -1?
Ответить с цитированием
  #6 (permalink)  
Старый 27.02.2011, 04:52
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Как обычно, предлагаю решение своей же проблемы
function f(arr, substring, separator) {
   var s = arr.join(separator);
   var i = s.indexOf(substring);
   if (i==-1) {
      return -1;
   }
   s = s.slice(0,i);
   return s.split(separator).length - 1;
}
var arr = ['qwerty','uiopas','dfghjk'];
var substring = 'fg'; 
var separator = '#*#*#*#'; // какая-нибудь уникальная строка
alert(f(arr, substring, separator))
Есть минус: найдет только первое вхождение строки (кто хочет, тот допишет).

А какой максимальный размер строки в яваскрипт?
Ответить с цитированием
  #7 (permalink)  
Старый 27.02.2011, 10:29
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Matre
Не зря же придумали String.prototype.search.
alert(Array.prototype.search == constructor.search);  //true
alert(RegExp.prototype.search == constructor.search); //true
alert(String.prototype.search == constructor.search); //false

А если уж нужно, токроссбраузерное решение indexOf():
//Array.indexOf
(function(A) {
    A.indexOf = A.indexOf || function(object) {
        var i = this.length;
        while(i--) {
            if(i in this && this[i] === object) {
                return i;
            }
        }
        return -1;
    };
})(Array.prototype);

//String.indexOf
String.prototype.indexOf = function(str) {
    return this.search(str);
};

alert('String.indexOf: '+'12345'.indexOf('4')+ '\n' + 'Array.indexOf: '+[1, 2, 3, 4, 5].indexOf(4));

Последний раз редактировалось monolithed, 27.02.2011 в 12:21.
Ответить с цитированием
  #8 (permalink)  
Старый 27.02.2011, 11:00
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от monolithed
[this].join().search(str)
Каков смысл таких столь странных преобразований?
Ответить с цитированием
  #9 (permalink)  
Старый 27.02.2011, 11:53
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от with-love-from-siberia
Каков смысл таких столь странных преобразований?
в конкретном случае - никакого смысла нет, о другом думал, потом передумал, а часть мысли осталась
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в строке другой подстроки средствами JS YAN Общие вопросы Javascript 13 23.07.2013 09:41
поиск подстроки в адресе по месту расположения amidamaru3000 Opera, Safari и др. 5 20.01.2011 17:11
Поиск в двумерном массиве Vamp Общие вопросы Javascript 2 16.07.2009 13:05
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31