Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Самый быстрый и короткий способ получить текст до первого пробела? (https://javascript.ru/forum/misc/69585-samyjj-bystryjj-i-korotkijj-sposob-poluchit-tekst-do-pervogo-probela.html)

Teamur 04.07.2017 18:45

Самый быстрый и короткий способ получить текст до первого пробела?
 
var str = 'lorem ipsum dolor';

// Моя реализация:

var word = str.slice(0,str.indexOf(' '))

Как еще можно?

Dilettante_Pro 04.07.2017 19:08

Teamur,
var str = 'lorem ipsum dolor';
var word = str.split(" ")[0];
alert(word);

Teamur 04.07.2017 19:14

Dilettante_Pro,
а мне, как обычно, пришло в голову сложное решение!
Эх!

Teamur 04.07.2017 19:23

Но! Если строка состоит из 10000 слов, разделенных пробелом, то метод 'split' будет обрабатывать гигантский текст, создавать массив и, наконец, брать первое слово.
А 'indexOf' работает до первого совпадения, следовательно, закончит в данном случае значительно быстрее.

Может что-то еще есть? Или придется пойти на компромис 'длина кода/скорость' )

Наверное, решением будут регулярные выражения, в которых я не силен!

j0hnik 04.07.2017 21:27

var str = 'lorem ipsum dolor';
var word = str.substring(0,str.indexOf(' '));


var str = 'lorem ipsum dolor';
var word = str.substr(0,str.indexOf(' '));

j0hnik 04.07.2017 21:32

slice
var str = 'lorem ipsum dolor';
var word = str.slice(0,str.indexOf(' '));

13,713,840
±0.26%
80% slower


substring
var str = 'lorem ipsum dolor';
var word = str.substring(0,str.indexOf(' '));

69,007,394
±0.18%
fastest


substr
var str = 'lorem ipsum dolor';
var word = str.substr(0,str.indexOf(' '));

59,538,496
±0.17%
14% slower

ваш метод в данном случае на 80% медленнее substring

j0hnik 04.07.2017 21:36

Split так вообще черепаха, даже с такой короткой сточкой. Просто он не для этих целей.

Teamur 05.07.2017 00:29

j0hnik,
я и говорю 10000 слов и split - можно чай успеть попить )

ruslan_mart 05.07.2017 03:45

Вариант через RegExp:

var word = /^.*?(?=\s)/.exec(str)[0];

var word = str.match(/^.*?(?=\s)/)[0];

Alexandroppolus 05.07.2017 11:03

с регексом проще тогда уж
var word = /^\S*/.exec(str)[0];


но indexOf всё равно быстрее.


Часовой пояс GMT +3, время: 21:16.