Поиск вхождения подстроки в массиве строк.
Хотелось бы более оптимальное решение, чем использование цикла. indexOf с регуляркой в качестве аргумента не работает :( .
|
Цитата:
|
Цитата:
alert("Hello, world!".indexOf(/\w/));
Не зря же придумали String.prototype.search. FINoM, а что тут такого сложного? Цикл + search/indexOf. |
Цитата:
<!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>
|
Matre,
че значит -1? |
Как обычно, предлагаю решение своей же проблемы :)
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))
Есть минус: найдет только первое вхождение строки (кто хочет, тот допишет).А какой максимальный размер строки в яваскрипт? |
Цитата:
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));
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 18:42. |