Друзья, пишите свои решения в комментариях! Чем больше будет таких решений и чем они будут разнообразнее, тем больше пользы они принесут всем, тем успешнее будут наши собеседования!
Привет, Серёж. Спасибо за новую интересную задачу. Не смотря твоё видео, решил задачу также за пару минут, только в первом варианте я не использовал массив: function findVowel(str = '') { let count = 0; for (let ch of str.toLocaleLowerCase()) { if ('aeiou'.includes(ch)) { count += 1; } } return count; } А во втором варинате записал более компактно, у нас же фан тоже присустсвует ;) const findVowel = str => matches = str.match(/[aeiou]/gi) ? matches.length : 0;
Ещё такое решение пришло в голову: function findVowel(str) { let count = 0; let regexp = /[aeiou]/gi; while (regexp.exec(str)) { count++; } return count; }
@@alexnikolskiy регулярка - правильное решение. Предыдущий код - неправильное, так как ищет только первое вхождение и не будет отражать количество гласных для любой произвольной строки.
Во втором варианте переменная matches не объявлена, что приведёт к ошибке в strict mode. Используя optional chaining из ES2020, можно оформить решение немного иначе: const findVowels = str => str.match(/[aeiou]/gi)?.length || 0;
Задачка похожа на эту, как бы Вы её решили? Implement function matchCount which will find and return number of how many times two params present togethers in string passed as a first argument. Examples matchCount('ab___ab__', 'a', 'b') // 2 matchCount(bv___ab__, 'a', 'b') // 1 const MatchCount = (str,param1,param2) => { }
Очень много вопросов к условию :) Строки всегда разбиты такими вот разделителями "___"? Если matchCount('ab___ab__', 'a', 'b') // 2 то что вернет matchCount('ab___ba__', 'a', 'b') // ?? То есть важен ли порядок в паре
Я не профи конечно, но написал функцию которая запрашивает строку у пользователя и считает русские и английские гласные буквы. Вместо prompt можно использовать input через value. "use strict"; function findVowels() { let text = prompt('Ввести текст', '').toLowerCase().split(''); let numberChar = text.length; let count = 0; const vowels = ['у', 'е', 'ы', 'а', 'о', 'э', 'я', 'и', 'a', 'e', 'i', 'o', 'u']; for (let i = 0; i < numberChar; i++) { if (vowels.includes(text[i])) { count++; } } console.log(count); } findVowels();
нужно на textarea повесить обработчик события addEventListener на keyUp например. И каждый раз вызывать нашу функцию которую мы написали - внутрь передавать строку - содержимое textarea. PS: надеюсь я правильно понял вопрос
Та так не интересно ,лучше найди тестовые задания с вакансий, там такие объемы ща порой запрашивают, что складывается впечатление ,что тебя не взяли, но зато ты уже во всю помогаешь пилить проект :D
Да, иногда бывает) Я сам уже подумывал над этим, но пока склоняюсь к мысли что это должен быть стрим на час или два - а это уже другой формат. И надо понимать кому такое интересно.
@@smashno На самом деле польза от таких не очень сложных задач тоже есть. Например, я сейчас освежаю в памяти регулярые выражения) Их в работе не так уж и часто используешь, но знать нужно и на собеседовании могут спросить.
Спасибо, что поделились решением! ...но оно сейчас, к сожалению, не работает 🙁 1) Переменная vowels (которая вероятно должна содержать массив гласных) в коде нигде не определена, поэтому обращение к ней вызовет ошибку. Возможно, что эта переменная была создана отдельно. 🤔 Но обращение из функции к глобальным переменным всё таки считается плохой практикой. Эта функция не является чистой, поскольку массив vowels не инкапсулирован. 2) Использование массива в качестве счётчика довольно креативная идея, но её рациональность весьма сомнительна (учитывая принцип KISS). 3) Инструкция str[item] = true, хотя и не вызывает ошибок, но не имеет ни практического смысла, ни даже какой-либо ясной цели. Вспомним, что примитивные типы данных в JS являются иммутабельными. В этой инструкции мы вызываем объект-обёртку для строки str, и присваиваем её динамическому свойству item (напомню, что в переменной item у нас хранится один из символов этой строки) булевое значение true, после чего объект-обёртка благополучно удаляется. И так, не ясно зачем, в каждой итерации метода filter. 🤷♂️
Почему-то решение этой задачи все копипастят забывая о гласной Y. Мое решение: const countVowels = str => str.replace(/[^eyuioa]/g, '').length Короче за счет отсутствия условия. gist.github.com/devable/a6f7a09e2fae399676fdc399481d42a5
"Копипастят" видать потому что "y" - это не гласная в английском :) i.pinimg.com/736x/68/de/9b/68de9be72fa86f6cd500a61efd86ff62--third-grade-language.jpg
@@frontendscience Y не совсем не гласная в английском. Она представляет одновременно и гласную, и согласную simple.wikipedia.org/wiki/Vowel#:~:text=In%20English%20there%20are%20five%20vowel%20letters%20in%20the%20alphabet.&text=These%20letters%20are%20vowels%20in,both%20vowel%20and%20consonant%20sounds.
интересная задача. вот только у меня вопрос. а как не посчитать сколько гласных, а убрать все гласные из слова и вывести только согласные?)))) p.s. вроде 'y', тоже гласная)
Привіт я тіки почав вивчати JS, мені подобається твоя подача інфи щодо програмуванняі взагалі сферу ІТ, бажаю успіху твоєму каналу! var array = ['a', 'i,', 'u', 'e', 'o']; array; Що Ви скажете про такий варіант вирішення задачі? занадто просто і по дурацьки?
Хех то чувство, когда написал громоздкий код, а потом смотришь решение где написано пару строчек const vowels = ['a', 'e', 'i', 'o', 'u']; findVowels('Hello'); function findVowels(w){ let arr = w.toLowerCase().split(''); let count = 0; arr.reduce((index, letter)=>{ vowels.forEach(function(vowel) { if(vowel === letter){ count +=1; }}); }, true); console.log(count) }
вот такое у меня решение const findVowels = str =>{ let count = 0; const obj = { 'a':0, 'e':0, 'i':0, 'o':0, 'u':0, } for (const el of str) { Object.keys(obj).includes(el) ? obj[el] +=1 : null } for (const key in obj) { obj[key] ? count+= obj[key] : null; } return count } console.log(findVowels('abbueee'))
Друзья, пишите свои решения в комментариях! Чем больше будет таких решений и чем они будут разнообразнее, тем больше пользы они принесут всем, тем успешнее будут наши собеседования!
Ну или так :)
function findVowels(str) {
const vowels = ['a', 'e', 'i', 'o', 'u'];
return str.split('').filter(ltr => vowels.includes(ltr)).length;
}
Классное решение! Мне нравится его "нативность". С помощью фильтрации оставляем гласные и смотрим длину массива!
function findVowels (word) {
const vowels = ['a', 'e', 'i', 'o', 'u'];
return word.toLowerCase().split('').reduce(function(acc, el) {
return binarySearch(vowels, el) !== -1 ? acc + 1 : acc;
}, 0)
}
увидел это решение и понял, что перемудрил чуток...
Решение классное! Маленькая поправка: return str.toLowerCase().split('').filter(ltr => vowels.includes(ltr)).length;
Можно ли использовать optional chaining? str => str.match(/[aeiou]/gi )?.length || 0
Привет, Серёж. Спасибо за новую интересную задачу. Не смотря твоё видео, решил задачу также за пару минут, только в первом варианте я не использовал массив:
function findVowel(str = '') {
let count = 0;
for (let ch of str.toLocaleLowerCase()) {
if ('aeiou'.includes(ch)) {
count += 1;
}
}
return count;
}
А во втором варинате записал более компактно, у нас же фан тоже присустсвует ;)
const findVowel = str => matches = str.match(/[aeiou]/gi) ? matches.length : 0;
Ещё такое решение пришло в голову:
function findVowel(str) {
let count = 0;
let regexp = /[aeiou]/gi;
while (regexp.exec(str)) {
count++;
}
return count;
}
@@alexnikolskiy регулярка - правильное решение. Предыдущий код - неправильное, так как ищет только первое вхождение и не будет отражать количество гласных для любой произвольной строки.
Во втором варианте переменная matches не объявлена, что приведёт к ошибке в strict mode. Используя optional chaining из ES2020, можно оформить решение немного иначе:
const findVowels = str => str.match(/[aeiou]/gi)?.length || 0;
Не знал про includes, пошел другим путем :)
const findVowels = str => {
const vowelsArr = ['a', 'e', 'i', 'o', 'u'];
let counter = 0;
const myStrArr = str.toLowerCase().split('');
vowelsArr.forEach(letter => {
myStrArr.forEach(myLetter => {
if (myLetter === letter) counter++;
});
});
return counter;
};
Отлично вышло!
Задачка похожа на эту, как бы Вы её решили?
Implement function matchCount which will find and return number
of how many times two params present togethers in string passed as a first argument.
Examples matchCount('ab___ab__', 'a', 'b') // 2
matchCount(bv___ab__, 'a', 'b') // 1
const MatchCount = (str,param1,param2) => {
}
Очень много вопросов к условию :)
Строки всегда разбиты такими вот разделителями "___"?
Если matchCount('ab___ab__', 'a', 'b') // 2 то что вернет matchCount('ab___ba__', 'a', 'b') // ?? То есть важен ли порядок в паре
Добрый день, а каким редактором вы пользуютесь в данном примере?
Это онлайн редактор codepen
const findVowels = (str) => {
const letters = [...str.toLowerCase()];
const vowels = ['a', 'e', 'i', 'o', 'u'];
let count = 0;
vowels.forEach((letter) => {
if (letters.includes(letter)) {
count += 1;
}
});
return count;
};
Nice 👍
Ну наверное не самое лучшее, зато работает :)
function findVolwels(str){
let arr = ['a', 'e', 'i', 'o', 'u'];
let count = 0;
for(let i = 0; i < str.length; i++){
for(let j = 0; j < arr.length; j++){
if(str[i].toLowerCase() == arr[j]){
count++;
}
}
}
return count;
}
console.log(findVolwels('hello'))
console.log(findVolwels('why'))
Спасибо большое )))
И Вам!
Thanks!)
На Java:
public class FindVowels {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hi";
System.out.println(countOfVowels(s1));
System.out.println(countOfVowels(s2));
}
private static int countOfVowels(String str){
return str.length() - str.replaceAll("[aeiu]", "").length();
} }
Я не профи конечно, но написал функцию которая запрашивает строку у пользователя и считает русские и английские гласные буквы.
Вместо prompt можно использовать input через value.
"use strict";
function findVowels() {
let text = prompt('Ввести текст', '').toLowerCase().split('');
let numberChar = text.length;
let count = 0;
const vowels = ['у', 'е', 'ы', 'а', 'о', 'э', 'я', 'и', 'a', 'e', 'i', 'o', 'u'];
for (let i = 0; i < numberChar; i++) {
if (vowels.includes(text[i])) {
count++;
}
}
console.log(count);
}
findVowels();
Благодарю за решение! 👍
const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
const findVowels = (str: string): number => {
return str.split('').reduce((acc, char) => {
if (vowels.has(char)) acc ++
return acc
}, 0)
}
Благодарю за решение! Компактно вышло!
А как зделать ето только с textarea
нужно на textarea повесить обработчик события addEventListener на keyUp например. И каждый раз вызывать нашу функцию которую мы написали - внутрь передавать строку - содержимое textarea. PS: надеюсь я правильно понял вопрос
А как узнать сколько букв с слове, и как сделать так чтобы на следующей строке была первая и последняя буква слова
количество букв в слове: let word = word.length
первая буква слова: let first = word[0]
последняя буква слова: let last = word[word.length -1]
Та так не интересно ,лучше найди тестовые задания с вакансий, там такие объемы ща порой запрашивают, что складывается впечатление ,что тебя не взяли, но зато ты уже во всю помогаешь пилить проект :D
Поддержу, хотелось бы посложнее немного задач. Неужели в MyHeritage и Яндексе спрашивали на собеседованиях такие задачки?
Да, иногда бывает) Я сам уже подумывал над этим, но пока склоняюсь к мысли что это должен быть стрим на час или два - а это уже другой формат. И надо понимать кому такое интересно.
@@smashno На самом деле польза от таких не очень сложных задач тоже есть. Например, я сейчас освежаю в памяти регулярые выражения) Их в работе не так уж и часто используешь, но знать нужно и на собеседовании могут спросить.
Интересно, почему Y никогда не записывают в гласную?))
const vowelsCount = (str) => {
var arr = [];
str.split("").filter(function (item) {
if(vowels.includes(item)){
str[item] = true
arr.push(item)
}
})
return arr.length
};
Красиво получилось
Спасибо, что поделились решением!
...но оно сейчас, к сожалению, не работает 🙁
1) Переменная vowels (которая вероятно должна содержать массив гласных) в коде нигде не определена, поэтому обращение к ней вызовет ошибку. Возможно, что эта переменная была создана отдельно. 🤔 Но обращение из функции к глобальным переменным всё таки считается плохой практикой. Эта функция не является чистой, поскольку массив vowels не инкапсулирован.
2) Использование массива в качестве счётчика довольно креативная идея, но её рациональность весьма сомнительна (учитывая принцип KISS).
3) Инструкция str[item] = true, хотя и не вызывает ошибок, но не имеет ни практического смысла, ни даже какой-либо ясной цели. Вспомним, что примитивные типы данных в JS являются иммутабельными. В этой инструкции мы вызываем объект-обёртку для строки str, и присваиваем её динамическому свойству item (напомню, что в переменной item у нас хранится один из символов этой строки) булевое значение true, после чего объект-обёртка благополучно удаляется. И так, не ясно зачем, в каждой итерации метода filter. 🤷♂️
Почему-то решение этой задачи все копипастят забывая о гласной Y.
Мое решение:
const countVowels = str => str.replace(/[^eyuioa]/g, '').length
Короче за счет отсутствия условия.
gist.github.com/devable/a6f7a09e2fae399676fdc399481d42a5
"Копипастят" видать потому что "y" - это не гласная в английском :) i.pinimg.com/736x/68/de/9b/68de9be72fa86f6cd500a61efd86ff62--third-grade-language.jpg
А вообще решение хорошее!
В инете инфа разнится :)
@@frontendscience Y не совсем не гласная в английском. Она представляет одновременно и гласную, и согласную simple.wikipedia.org/wiki/Vowel#:~:text=In%20English%20there%20are%20five%20vowel%20letters%20in%20the%20alphabet.&text=These%20letters%20are%20vowels%20in,both%20vowel%20and%20consonant%20sounds.
"Y" тоже гласная
"В английском языке буква Y может отвечать как за гласный, так и согласный звук."
@@frontendscienceв слове why она гласная)
интересная задача. вот только у меня вопрос. а как не посчитать сколько гласных, а убрать все гласные из слова и вывести только согласные?)))) p.s. вроде 'y', тоже гласная)
ты пьяный ?
Привіт я тіки почав вивчати JS, мені подобається твоя подача інфи щодо програмуванняі взагалі сферу ІТ, бажаю успіху твоєму каналу!
var array = ['a', 'i,', 'u', 'e', 'o'];
array;
Що Ви скажете про такий варіант вирішення задачі? занадто просто і по дурацьки?
Ілля, дякую за підтримку!
Дивись, ти перерахував в array всi голоснi, а тепер треба ще саме рiшення дописати.
Бажаю успiхiв у фронтендi!!
const findVowels = str => (str.match(/[aeiou]/gi) || []).length
Классный вариант получился. Очень лаконичный
@@frontendscience Спасибо
Хех то чувство, когда написал громоздкий код, а потом смотришь решение где написано пару строчек
const vowels = ['a', 'e', 'i', 'o', 'u'];
findVowels('Hello');
function findVowels(w){
let arr = w.toLowerCase().split('');
let count = 0;
arr.reduce((index, letter)=>{
vowels.forEach(function(vowel) {
if(vowel === letter){
count +=1;
}});
}, true);
console.log(count)
}
Благодарю за решение ) Вышло не так уж и громоздко
function getCount(str) {
let sum = 0;
let arr = str.split('');
for(let elem of arr) {
if(elem === 'a' || elem === 'e' || elem === 'i' || elem === 'o' || elem === 'u') {
sum = sum + 1;
}
}
return sum;
}
function vowels(s) { return s.replace(/[^aeiou]/gi, '').length }
вот такое у меня решение
const findVowels = str =>{
let count = 0;
const obj = {
'a':0,
'e':0,
'i':0,
'o':0,
'u':0,
}
for (const el of str) { Object.keys(obj).includes(el) ? obj[el] +=1 : null }
for (const key in obj) { obj[key] ? count+= obj[key] : null; }
return count
}
console.log(findVowels('abbueee'))
Кто от WebDev здесь ?? )
мы здесь
достаточно низкоуровневое решение задачи, для наглядного понимания с редьюсом)
const findWovels = (str) => {
const strTo = str.toLowerCase().split('')
return strTo.reduce((acc, nextValue) => {
arrVowels.forEach(vow => {
if (nextValue === vow) {
acc++
}
})
return acc
}, 0)
}
Класс- такого решения еще не было! Благодарю!
const fv = w => w.match(/[aeiou]/ig)?.length || 0