function explode( delimiter, string ) { // Split a string by string // // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: kenneth // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) var emptyArray = { 0: '' }; if ( arguments.length != 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined' ) { return null; } if ( delimiter === '' || delimiter === false || delimiter === null ) { return false; } if ( typeof delimiter == 'function' || typeof delimiter == 'object' || typeof string == 'function' || typeof string == 'object' ) { return emptyArray; } if ( delimiter === true ) { delimiter = '1'; } return string.toString().split ( delimiter.toString() ); }
explode(' ', 'Kevin van Zonneveld');
Какой смысл во всех этих бесчисленных проверках?
Насколько я понял, автор постарался сделать поведение функции максимально идентичным php...
Обычно достаточно просто split:
split
var str = "a,b,c" str.split(',') // => массив ["a","b","c"]
Обычно достаточно просто split
Согласен.
Все эти проверки здесь нужны для того, чтобы в случае некорректного ввода аргументов функция отдавала те же результаты, какие отдает в PHP.
Вы $limit забыли.
array explode ( string $delimiter , string $string [, int $limit ] )
Хорошо ты подшутил с limit :-D
С чего ты взял что насчет limit это шутка???
Я конечно понимаю, что канонически кошерно создавать аналоги функций и не пользоваться ОО возможностями языков, но кто отменял простое:
var a = "word,of,split"; a.split(",");
вот правильная версия, полностью аналогична пыховой: function explode(d, s, l) { var out=[], tmp, pos; if (l) { tmp = s; pos = s.indexOf(d) while(l-1 && pos>=0) { out.push(tmp.substr(0, pos)); tmp = tmp.substr(pos+d.length); l--; pos = tmp.indexOf(d); } out.push(tmp); } else out = s.split(d); return out; }
Дерево всех статей
Какой смысл во всех этих бесчисленных проверках?
Насколько я понял, автор постарался сделать поведение функции максимально идентичным php...
Обычно достаточно просто
split
:Согласен.
Все эти проверки здесь нужны для того, чтобы в случае некорректного ввода аргументов функция отдавала те же результаты, какие отдает в PHP.
Вы $limit забыли.
Хорошо ты подшутил с limit :-D
С чего ты взял что насчет limit это шутка???
Я конечно понимаю, что канонически кошерно создавать аналоги функций и не пользоваться ОО возможностями языков, но кто отменял простое:
вот правильная версия, полностью аналогична пыховой:
function explode(d, s, l)
{
var out=[], tmp, pos;
if (l)
{
tmp = s;
pos = s.indexOf(d)
while(l-1 && pos>=0)
{
out.push(tmp.substr(0, pos));
tmp = tmp.substr(pos+d.length);
l--;
pos = tmp.indexOf(d);
}
out.push(tmp);
}
else
out = s.split(d);
return out;
}