Поиск вхождения подстроки в массиве строк.
Хотелось бы более оптимальное решение, чем использование цикла. 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, время: 01:55. |