Как найти ВСЕ слова, содержащие X символов?

#javascript

#javascript

Вопрос:

Я пытаюсь написать код, который находит все слова, содержащие 4 (в данном случае) символа. Итак, мой ожидаемый результат будет this that abcd

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

 let string = 'aa this bb cc that abcd';
function longWord(str) {
  let words = str.split(' ');
  let longWord = '';
  for (let word of words) {
    if (word.length > longWord.length) longWord = word;
  }
  return longWord;
}
console.log(longWord(string));
  

Насколько я понимаю, мне нужно включить цикл.

Изменить с for (let word of words) {

К этому for (var i = 1; i < words.length; i ) {

Но затем после этого я теряюсь : (

Просматривая Google, я могу найти только код, похожий на мой, или выводящий номер символа.

Комментарии:

1. создайте массив и продолжайте вводить результаты и, наконец, верните этот массив.

2. split в " " и filter результирующем массиве на основе length

3. @KrishnaPrashatt Это ужасно, почему бы просто не использовать разделение, а затем фильтр? Вот так: string.split(' ').filter(word => word.length === 4)

Ответ №1:

Вы можете использовать split with filter примерно так.

split создаст массив строк, разделенных пробелом. filter вернет только строки length из 4 символов. Наконец, join вернет массив в виде строк, разделенных пробелом.

 let string = 'aa this bb cc that abcd';

function longWord(str) {
    return str.split(' ').filter(x => x.length === 4).join(' ');
}

console.log(longWord(string));  

Комментарии:

1. Должно быть str.split(' ') , не string.split(' ')

Ответ №2:

 string.split(' ').filter(x => x.length === 4).map(x => x)
  

Этот фрагмент кода должен выдавать ожидаемый результат

Комментарии:

1. Почему map требуется?

2. Я думаю, что это неполный ответ. В результате получается массив, а не строка, как просил @Marius, и отображение не требуется.

3. Вы правы, ответ служит только основой, но отсюда не должно быть слишком сложно соединить строки вместе

Ответ №3:

Вот так

  • split : создайте массив со всеми словами
  • filter : получить только слова с 4 символами
  • join : создайте строку со всеми элементами, разделенными пробелом

    var el = string.split(' ').filter(x => x.length == 4).join(' ');

Комментарии:

1. Ваш ответ правильный, но мог бы быть лучше с фрагментом кода.

2. Да, он удалил мой фрагмент кода, когда я попытался добавить список. Спасибо вам за правку @Koby Douek.

Ответ №4:

Если я правильно понимаю, есть две задачи:
1. найти наибольшее количество символов для слова в строке и
2. найти все слова, соответствующие этому количеству

 const longestWords = str => {
    const words = str.split(/s /g);
    const maxCount = Math.max.apply( null, words.map( word => word.length ));
    return words.filter( word => word.length === maxCount );
};
  

https://jsfiddle.net/pkxwfmb2/

 console.log( longestWords("aa this bb cc that abcd") );
// [ "this", "that", "abcd" ]
console.log( longestWords("aa this bb cc that abcdef") );
// [ "abcdef" ]
console.log( longestWords("a bb c dd e f gg") );
// [ "bb", "dd", "gg" ]
  

Комментарии:

1. Да, ничто в исходном вопросе не говорит о том, что 4 — это желаемое количество символов, которое нужно найти, просто так получилось, что это наибольшее количество в строке примера. Таким образом, жесткое кодирование 4 в решении имеет мало смысла.

2. Ваш код выглядит намного лучше, это то, чего я пытался достичь jsfiddle.net/MariuzM/9gtyevm4/2

Ответ №5:

Попробуйте это:

 let string = 'aa this bb cc that abcd';
function longWord(str) {
    let words = str.split(' ');
    let output = [];

    for (let i = 0; i < words.length; i  ) {
        if (words[i].length == 4)
            output.push(words[i]);
    }
    return output.join(',');
}
console.log(longWord(string));
  

Вы получите ожидаемый результат.