LINUX.ORG.RU

Возможно ли упрощение этого алгоритма?

 


0

1

Приветствую. Мне нужно определить длину слова в строке. Границы слова определяются по концами строки или по ближайшими пробелами по обе стороны от слова.

Мой алгоритм здесь - http://repl.it/7aL/3. Есть ли возможность упростить его?

★★
Ответ на: комментарий от ieeya

Динамическая типизация - определение типа по присваиваемому значению.

Razip ★★
() автор топика
Ответ на: комментарий от ieeya

там нет типов, var это типа локальная переменная.

comp00 ★★★★
()

Код ужасен. Читай про регулярки. То что ты хочешь делается в несколько строк

comp00 ★★★★
()

indexOf, lastIndexOf?

Если без них, то

while(i != <конец/начало>){
 <инкремент/декремент>
 if(text[i] == ' '){
  ...
  break;
 }
}
будет компактнее

Ake
()
Ответ на: комментарий от voltaren

Мне не постоянно необходимо первое слово, все зависит от position.

Razip ★★
() автор топика
Ответ на: комментарий от comp00

С их помощью можно получать позиции отдельных символов?

Razip ★★
() автор топика
Ответ на: комментарий от Ake

За indexOf и lastIndex спасибо! Получилось вот это:

var text = 'abc bbbbbb asdfbc bbb';
var position = 14;

var wordStart = (text.lastIndexOf(' ', position) > -1) ? text.lastIndexOf(' ', position) + 1 : 0;
var wordEnd = (text.indexOf(' ', position) > -1) ? text.indexOf(' ', position) - 1 : text.length;

console.log(text[wordStart], text[wordEnd]);
Razip ★★
() автор топика
Ответ на: ынжой от Ford_Focus

Ваш код лишь ищет пробелы после position. Т.е. нужно еще раз продублировать этот код с некоторыми изменениями (чтобы substr получил строку от position до 0). И зачем такие трудности когда есть indexOf/lastIndexOf?

Razip ★★
() автор топика
Ответ на: ынжой от Ford_Focus

Присмотревшись, я понял что Ваш код делает вообще не то, что мне нужно. Вот зачем нужно было получать длину символа, на котором оканчивается слово? Она всегда равна 1. Мне нужно получить длину слова, которая высчитывается по формуле endIndex - startIndex + 1.

Razip ★★
() автор топика
Ответ на: комментарий от Razip

прощу прощения, провтыкал этот момент

var string = 'abc abc abc';
[string.substr(2), string.substr(0, 2)].forEach(function(substring){
	console.log(
		substring.match(/^(\s)*(\S)+(\s)*/ig)[0]
			.trim()
			.length
	);
})
Ford_Focus ★★★★★
()
Ответ на: комментарий от Razip

код считает длину первого слова в подстроке, порезанной по position. за слово принимается последовательность любых символов, оканчивающаяся на пробел или конец строки. если я не правильно понял задание - прошу прощения

Ford_Focus ★★★★★
()
Последнее исправление: Ford_Focus (всего исправлений: 3)

Кривой он. Завалится на юникодных пробелах, переводах строк, табах и пунктуации.

https://github.com/slevithan/xregexp

Посмотрите из чего \w состоит.

Vit ★★★★★
()

если лень возиться с регулярками (хотя имхо, с ними проще), можно с помощью split разделить строку на массив из слов, взять length (оба методы строк) от нужного слова.

Dred ★★★★★
()

Извиняюсь. Я забыл упомянуть, что также нужно получать индексы символов начала и конца слова для дальнейшей с ними работы. Поэтому наилучшим решением являются методы .indexOf() и .lastIndexOf().

Razip ★★
() автор топика
Последнее исправление: Razip (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.