#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));
Вы получите ожидаемый результат.