@pcdesign

Как выбрать из текста 3 слова одинаковой или похожей (максимально приближенной) длины?

var txt = `На ее тонкой и длинной шее, похожей на куриную ногу, было наверчено 
какое-то фланелевое тряпье, а на плечах, несмотря на жару, болталась
вся истрепанная и пожелтелая меховая кацавейка. 
Старушонка поминутно кашляла и кряхтела. 
Должно быть, молодой человек взглянул на нее каким-нибудь 
особенным взглядом, потому что и в ее глазах мелькнула 
вдруг опять прежняя недоверчивость.`;


Например, надо найти 3 слова с длинной из 3 букв.
Ожидаемый результат:
шее
вся
что

Если надо найти 3 слова с длиной из 14 букв
Ожидаемый результат:
недоверчивость
истрепанная
фланелевое

Как это сделать?
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Собрать из текста словарь "длина": [слово,слово]
Выбирать слова нужной длины, а при отсутствии смотреть соседние по значению ключи.

words = txt.replace(/[\.,\?\!\:;\–\(\)]/g, '').toLowerCase().split(/\s+/);

// make dictionary
var db = [];
for( var i = 0; i < words.length; i++) {
  word = words[i];
  len = word.length;
  if(db.length <= len || typeof db[len] == 'undefined') db[len] = [];
  if(!~db[len].indexOf(word)) db[len].push(word);
}

function getWords(db, length, n) {
  n = n || 3;
  var result = [], offset = 0, m;
  length = Math.max(0, Math.min(length, db.length));
  while( result.length < n) {

    m = n - result.length;
    if( db[length + offset]) {
      result = result.concat( getUpTo(m, db[length + offset]))
    }

    m = n - result.length;
    if( offset &&  m  &&  db[length - offset]) {
      result = result.concat( getUpTo(m, db[length - offset]))
    }
    
    m = n - result.length;
    if( m === 0) break;
    offset++;
    if( offset + length > db.length && offset > length) break;
  }
  
  return result;
}

function getUpTo(n, arr) {
  return arr.slice(0, Math.min(n, arr.length));
}


Fiddle
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
r0n1x
@r0n1x
html, css, js
let txt = `На ее тонкой и длинной шее, похожей на куриную ногу, было наверчено 
какое-то фланелевое тряпье, а на плечах, несмотря на жару, болталась
вся истрепанная и пожелтелая меховая кацавейка. 
Старушонка поминутно кашляла и кряхтела. 
Должно быть, молодой человек взглянул на нее каким-нибудь 
особенным взглядом, потому что и в ее глазах мелькнула 
вдруг опять прежняя недоверчивость.`;

    function searchWords(text, lettersCount) {
      return text.replace(',', '').split(' ').filter(function(item) {
        return item.length === lettersCount;
      })
    }

    console.log(searchWords(txt, 3));

пощупать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы