[noob_style] [js] поиск подстроки

dickofan

строка вида "цифры через запятую"
цифры могут иметь разную разрядность
str.search(num) реагирует на все вхождения искомого, в тч при разрядности искомого ниже, чем имеющиеся в строке, а нужно найти только соответствие num с полными цифрами, ограниченными запятыми
подозреваю, что может помочь regexp в качестве аргумента-шаблона поиска
хелп плиз

Serab

допиши по запятой в начало и конец, и делай str.search(',num,')

uncle17


Array.prototype.in_array = function(p_val)
{
for(var i = 0, i < this.length; i++)
{
if(this[i] == p_val)
{
return p_val;
}
}
return false;
}

is_num = str.split(',').in_array(num);

IvladV71


function f (str, val) {
return str.split(',').indexOf(val) >= 0;
}

IvladV71

Федя, мало того, что расширять прототипы встроенных объектов - моветон, так твой пример ещё и не скомпилируется.

PooH

регэксп не нужен, т.к. ты работаешь с числами
 
var str = "128.89, 567.138977, 0.5446, 128.8789790, 128.890000000"
var search = 128.89;
var res = str.split(",").map(function(s){
return parseFloat(s);
}).filter(function(val){
return val === search;
});

dickofan

indexOf вообще-то поиск в строке, с массивом не работает

PooH

правда filter - не во всех браузерах работает
PS функциональный стиль рулит

PooH

ndexOf вообще-то поиск в строке
 
Array.prototype.indexOf //function indexOf { [native code] }

IvladV71

indexOf вообще-то поиск в строке, с массивом не работает
o rly?

Maurog

регэксп не нужен, т.к. ты работаешь с числами
1) parseFloat может вернуть адекватный результат на неадекватную строчку
http://javascript.ru/parseFloat
а еще он NaN возвращает. вот веселуха начнется
2) сравнивать float дубово на равенство чревато сюрпризами

PooH

мм? 
 

//"128.89, 567.138977, 0.5446, 128.8789790, 128.890000000, ahaha, 1.2889e02"
str.split(",").map(function(s){return parseFloat(s);}).filter(function(val){return val === 128.89;})
//[128.89, 128.89, 128.89]

PooH

давай пример, когда не работает

Maurog

давай пример, когда не работает
1. я предлагаю вообще от float отказаться, ведь ТС не утверждал, что ему они нужны =)
2. я с js не знаком, но могу накинут такой вариант: "1a, 2b" найти 1 или 2. находиться не должно (ну я так полагаю).
var str = "1a, 2b"
var search = 2;
var res = str.split(",").map(function(s){
return parseFloat(s);
}).filter(function(val){
return val === search;
});
write(res);
выводит
[2]
работать со строками более робастно получится, нежели с числами (заморочки парсинга строки гораздо неприятнее, нежели перевести число в строку)

artimon

str="10, 0.1, 1";a=1.1-1;str.split(",").map(function(s){return parseFloat(s);}).filter(function(val){return val === a;})
[]

P.S. Впрочем, если всё задано константами, то будет работать, но кому нужны константы...
P.P.S. У топикстартера нет никаких вещественных чисел, есть цифры через запятую

PooH

OMFG
a = 1.1 -1
0.10000000000000009
совсем забыл про неточные вычисления
PS
с точностью до 8го знака
str.split(",").map(function(s){return parseFloat(s);}).filter(function(val){return Math.absval - a < Math.pow(0.1, 8);})

dickofan

всем спасибо, вариант самый очевидный и оптимальный, дальше какая-то жесть пошла )
2проп: адобовский ExtendScript считает, что indexOf к массиву неприменим, видимо, диалект

Serab

всем спасибо, вариант самый очевидный и оптимальный, дальше какая-то жесть пошла )
но он говнокодный, это я так, пошутил типа.
Оставить комментарий
Имя или ник:
Комментарий: