[noob_style] [js] поиск подстроки
допиши по запятой в начало и конец, и делай str.search(',num,')
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);
function f (str, val) {
return str.split(',').indexOf(val) >= 0;
}
Федя, мало того, что расширять прототипы встроенных объектов - моветон, так твой пример ещё и не скомпилируется.
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;
});
indexOf вообще-то поиск в строке, с массивом не работает
PS функциональный стиль рулит
ndexOf вообще-то поиск в строке
Array.prototype.indexOf //function indexOf { [native code] }
indexOf вообще-то поиск в строке, с массивом не работаетo rly?
регэксп не нужен, т.к. ты работаешь с числами1) parseFloat может вернуть адекватный результат на неадекватную строчку
http://javascript.ru/parseFloat
а еще он NaN возвращает. вот веселуха начнется
2) сравнивать float дубово на равенство чревато сюрпризами
//"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]
давай пример, когда не работает
давай пример, когда не работает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]работать со строками более робастно получится, нежели с числами (заморочки парсинга строки гораздо неприятнее, нежели перевести число в строку)
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. У топикстартера нет никаких вещественных чисел, есть цифры через запятую
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);})
2проп: адобовский ExtendScript считает, что indexOf к массиву неприменим, видимо, диалект
всем спасибо, вариант самый очевидный и оптимальный, дальше какая-то жесть пошла )но он говнокодный, это я так, пошутил типа.
Оставить комментарий
dickofan
строка вида "цифры через запятую"цифры могут иметь разную разрядность
str.search(num) реагирует на все вхождения искомого, в тч при разрядности искомого ниже, чем имеющиеся в строке, а нужно найти только соответствие num с полными цифрами, ограниченными запятыми
подозреваю, что может помочь regexp в качестве аргумента-шаблона поиска
хелп плиз