Просмотр полной версии : Самый быстрый и короткий способ получить текст до первого пробела?
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);
Dilettante_Pro,
а мне, как обычно, пришло в голову сложное решение!
Эх!
Но! Если строка состоит из 10000 слов, разделенных пробелом, то метод 'split' будет обрабатывать гигантский текст, создавать массив и, наконец, брать первое слово.
А 'indexOf' работает до первого совпадения, следовательно, закончит в данном случае значительно быстрее.
Может что-то еще есть? Или придется пойти на компромис 'длина кода/скорость' )
Наверное, решением будут регулярные выражения, в которых я не силен!
var str = 'lorem ipsum dolor';
var word = str.substring(0,str.indexOf(' '));
var str = 'lorem ipsum dolor';
var word = str.substr(0,str.indexOf(' '));
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
Split так вообще черепаха, даже с такой короткой сточкой. Просто он не для этих целей.
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 всё равно быстрее.
Вот еще вариант:
let s='lorem ipsum dolor',i,c='';
for(i of s){
if(i!=' '){
c=c+i
} else break
}
alert(c)
Но не знаю, да и не умею проверять код на скорость исполнения. Стыдно, что уж говорить )
Сделал чуть короче:
let s='lorem ipsum dolor',i,c='';
for(i of s){if(i==' ')break;c=c+i}
alert(c)
Ребят, а как вы проверяете код на скорость? Научите, пожалуйста.
Просьба проверьте этот код.
https://jsperf.com/
если акк на github есть то регистрироваться не надо.
быстрей substring ты уже тут ничего не придумаешь, регулярки тоже не самый быстрый путь.
https://jsperf.com/srfdjfjghdjghhf
посмотрите, все с этой темы в кучу собрал. тестировать RUN!
j0hnik,
аккаунта нет, читал, что его создание настоящий геморой.
По поводу substring. Напрашивается вопрос:
Почему он быстрее чем slice, например?
Ладно, пусть будет так:
substring быстрее, потому что более оптимизирован ))
:)
fastest
Testing in Firefox substr
Testing in Chrome substring
Testing in IE 11 slice
Testing in Edge substring and substr
j0hnik,
аккаунта нет, читал, что его создание настоящий геморой.
5 минут максимум;
на счет скорости в разных браузерах результаты могут отличаться, Рони прав тут.
но в данный момент Хром у большинства населения, так что опираться лучше на него.
Сам лично Оперой пользуюсь.
Привычка с тех времен когда она лидировала и в скорости и по функционалу.
j0hnik,
рони,
в Mozilla, наверное, посчитали правильным заточить движок браузера под метод с более коротким именем:)
j0hnik,
рони,
в Mozilla, наверное, посчитали правильным заточить движок браузера под метод с более коротким именем:)
не думаю что все так просто.
Всем спасибо за помощь!
Решение: substr - Firefox, substring - Chrome, ...
Ребят, а как вы проверяете код на скорость? Научите, пожалуйста.
Далеко идти не надо
console.time('s');
var str = 'lorem ipsum dolor';
var word = str.slice(0,str.indexOf(' '))
console.timeEnd('s');
Далеко идти не надо
console.time('s');
var str = 'lorem ipsum dolor';
var word = str.slice(0,str.indexOf(' '))
console.timeEnd('s');
слишком неточный метод, разброс от 0.011 до 0.02.
слишком неточный метод, разброс от 0.011 до 0.02.
Ну это не точно
Решение: substr - Firefox, substring - Chrome, ...
Ладно пусть ищем в тексте с самым длинным словом, которое вроде бы связано с названием белка и что-то более тысячи символов и поэтому заморачиваемся сколько мы потеряем на производительности, а на то, что надо еще проверить что-то за браузер и какой метод применить не обращаем внимания. Ну выигрывать тысячные доли в слове максимум 20 символов, это уже болезнь. )
Rise,
Спасибо за метод. Добавил в копилку. Но я не пишу софт для запуска ракет в космос, поэтому объект консоль удобнее и привычнее, и с задачей для сравнения величин подходит. Большая точность мне не нужна.
это уже болезнь. )
от праздности)
Alexandroppolus
06.07.2017, 10:34
Да, метод slice удивил - даже моей регулярке проиграл (в Хроме).
Ага... Значит performance.now()
Rise,Будет ли достаточно этого метода?
Просто не хочется изучать исходный код скрипта замера скорости с сайта https://jsperf.com/
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot