Jump to content
  • 0

split


youmay
 Share

Question

11 answers to this question

Recommended Posts

  • 0
Потому что вы просили сохранить только первые два элемента, полученные в результате разбиения.

«Хвост» был проигнорирован.

А мне казалось что будет работать как explode() в PHP.

Как же сделать чтобы разбивка произошла по первому делителю?

Чтобы получилось:

arr[0] = 'man + woman'

arr[1] = 'sex = children = problem'

Edited by youmay
Link to comment
Share on other sites

  • 0
А мне казалось что будет работать как explode() в PHP.

Как же сделать чтобы разбивка произошла по первому делителю?

Чтобы получилось:

arr[0] = 'man + woman'

arr[1] = 'sex = children = problem'

var arr = [];

var tmpArr = 'man + woman = sex = children = problem'.split("=");

arr[0] = tmpArr.shift();

arr[1] = tmpArr.join("=");

Link to comment
Share on other sites

  • 0
s0rr0w

Спешу огорчить - split использует ровно тот же движок регулярных выражений. Даже если туда передаётся строчка.

Было бы правдой, если бы не факт, что

str.split(" ") работает минимум в два раза быстрее str.split(/\s/)

Поясните разницу.

Link to comment
Share on other sites

  • 0

А, ну да. Только для .split сделано исключение.

Тем не менее, заметная разница в скорости появляется только на очень большом числе итераций (10..30 тысяч) и коротких строках (<300 символов).

При увеличении длины строки (за исключением Сафари) рег уменьшает отставание, а в IE даже обгоняет строковый разделитель.

Двукратное превосходство строкового разделителя есть только в том же Сафари.

В IE разница не более 10%.

В FF2 - около 25%.

Оперу не тестировал

var str = "a b c d e f g h i j k l m n o p q r s t v u w x y z "

var max = 5000;

var d1 = (new Date).valueOf()

for (var i=0; i<max; i++) {
var res = str.split(" ");
}

var d2 = (new Date).valueOf()

var reg = /\s/
for (var i=0; i<max; i++) {
var res = str.split(reg);
}

var d3 = (new Date).valueOf()

document.writeln("split(\" \") == "+(d2-d1)+"ms")
document.writeln("<br />")
document.writeln("split("+reg+") == "+(d3-d2)+"ms")

Link to comment
Share on other sites

  • 0
Как же сделать чтобы разбивка произошла по первому делителю?

У строк есть свои достаточно гибкие методы, подойдёт для такого случая, к примеру:

var s = 'man+woman=sex=children=problem', i = s.indexOf('=');
alert( s.slice(0,i) );
alert( s.slice(i+1) );

Даже если туда передаётся строчка.

Эт вряд ли, по ES строка от рега отделена в алгоритме (функция SplitMatch). Это теория. Практику можно проверять, подозреваю, большинство движков будут возиться с регом существенно дольше.

Двукратное превосходство строкового разделителя есть только в том же Сафари.

В IE разница не более 10%.

В FF2 - около 25%.

Оперу не тестировал

От теста зависит, у меня FF3 медленнее в 2 раза, Опера9.63 в 5-6!!! раз, IE6 чуток, Хром почти одинаково...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy