Есть ли способ идентифицировать определенные переменные в массиве с помощью цикла for?

Мне нужно разработать код, который считывает каждую опцию в массиве, подсчитывая гласные и согласные в каждой опции. Это также нужно напечатать в консоли.

let vowels = 0;
let consonants = 0;
const fruits = ["Apple", "Orange", "Pear", "Peach", "Strawberry", "Cherry", "Acai"];

for (let fruit in fruits) {
    console.info(fruits[fruit]);
    if (fruits[fruit] == "a" || fruits[fruit] == "e" || fruits[fruit] == "i" || fruits[fruit] == "o" || fruits[fruit] == "u") {
        vowels + 1;
    }
    else {
        consonants + 1;
    }
}

Это то, что у меня есть до сих пор, может кто-нибудь объяснить мне, что мне не хватает? После того, как я запустил его в коде Visual Studio, консоль по-прежнему отображала все параметры в массиве, не регистрируя, обращались ли или увеличивались ли гласные или согласные переменной переменной:

Редактировать: мне нужно подсчитать каждое слово в массиве и показать, сколько гласных и согласных в каждом слове.

[Running] node "d:\coding.js"
Apple
Orange
Pear
Peach
Strawberry
Cherry
Acai

[Done] exited with code=0 in 0.128 seconds

«без регистрации, обращались ли к переменным Гласные или Согласные даже или увеличивались ли они» - Где вы когда-либо наблюдали или выводили vowels или consonants? Вы просто забыли записать эти значения в консоль? (Кроме того... Если вы используете for ... of вместо for ... in в этом случае, вы можете просто ссылаться на значение как fruit вместо более неуклюжего fruits[fruit].)

David 17.02.2023 18:51

Почему вы ожидали иного? Вы console.info безоговорочно и никогда не смотрите на значения переменных, которые вы увеличиваете.

jonrsharpe 17.02.2023 18:52

Вы хотите смотреть только на одну букву в слове или вам нужно считать каждую букву в каждом слове?

bjelli 17.02.2023 19:25
fruits[fruit] == "a" проверяет, например. Apple"= = "a". Вместо этого вам нужно проверить, является ли каждый символ «яблоко» «а»
Andrew Parks 17.02.2023 20:13

@bjelli Мне нужно посчитать каждую букву в слове и записать в консоль, сколько гласных и согласных в этом слове. Затем сделайте то же самое для каждого слова в массиве.

LightningFireZC 18.02.2023 11:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

const fruits = ["Apple", "Orange", "Pear", "Peach", "Strawberry", "Cherry", "Acai"];

const vowels = fruits.flatMap(i=>[...i.toLowerCase()])
  .filter(c=>'aeiou'.includes(c)).length;

const consonants = fruits.join('').length - vowels;

console.info(vowels, consonants)

или используя регулярное выражение, благодаря комментарию Дэйва ниже:

const fruitsString = ["Apple", "Orange", "Pear", "Peach", "Strawberry", 
  "Cherry", "Acai"].join('')

const vowels = fruitsString.match(/[aeiou]/ig).length

const consonants = fruitsString.length - vowels

console.info(vowels, consonants)

(Есть... 15... гласных... giphy.com/gifs/69rOXF4YTDVDD6cwkt) Когда FP - ваш молоток, все выглядит как большой палец.

Dave Newton 17.02.2023 18:58

@DaveNewton Примечание: предыдущее редактирование забыли сделать .toLowerCase(), что, я думаю, вы имели в виду. Я думаю, вы бы предпочли подход регулярных выражений. Я реже использую regex a loss в обычном программировании, поэтому я по умолчанию использую этот подход.

Andrew Parks 17.02.2023 19:03
fruits.join('').toLowerCase().match(/[aeiou]/g).length Очевидно, что время выполнения имеет значение, но поверхностный бенчмаркинг показывает, что версия регулярного выражения заметно быстрее.
Dave Newton 17.02.2023 19:06

@DaveNewton или просто используйте /ig в регулярном выражении :)

Andrew Parks 17.02.2023 19:09

Преобразование их один раз должно быть постепенно быстрее, чем дополнительная работа в механизме регулярных выражений, но опять же, время выполнения будет иметь большое значение.

Dave Newton 17.02.2023 19:12

@DaveNewton Я думаю, может быть, на меня просто слишком повлияла цитата «используйте регулярное выражение для решения проблемы, теперь у вас есть две проблемы ...», и я недостаточно использую ее в простых случаях.

Andrew Parks 17.02.2023 19:12

Дело не столько в том, что «регулярные выражения здесь хороши» (кажется неприятным), а в том, что «некоторые FP выполняют дополнительную и/или избыточную работу» и «движкам регулярных выражений уделяется много внимания».

Dave Newton 17.02.2023 19:15

(FWIW я сделал упрощенный тест на jsbench.me, и //ig работает медленнее, с оговоркой, что я не тестирую в браузерах или в Node, так что :shrug:)

Dave Newton 17.02.2023 19:16

@DaveNewton «движкам регулярных выражений уделяется много внимания», так как над ними ведется большая работа по разработке с целью оптимизации производительности?

Andrew Parks 17.02.2023 19:33

Ага; они (как правило) довольно оптимизированы.

Dave Newton 17.02.2023 20:08
Ответ принят как подходящий

Я добавил еще несколько console.infos в ваш код, и я использовал другую переменную letter.

Вы хотите смотреть только на одну букву в слове, или нужно считать каждую букву в каждом слове?

    let vowels = 0;
    let consonants = 0;
    const fruits = ["Apple", "Orange", "Pear", "Peach", "Strawberry", "Cherry", "Acai"];
    
    for (let word of fruits) {
        console.info("working on word", word);
    
        letter = word[0];   // this is probably wrong, do you need to check EVERY letter of a word?
    
        console.info("  looking at letter", letter);
    
        if (letter == "a" || letter == "e" || letter == "i" || letter == "o" || letter == "u") {
            vowels + 1;
        }
        else {
            consonants + 1;
        }
        console.info("  up to now i found", vowels, "vowels and", consonants, "consonants");
    }

Вы написали, что нужно считать каждую букву, поэтому нам нужен еще один цикл, чтобы пройти каждая буква текущего слова:

        let vowels = 0;
        let consonants = 0;
        const fruits = ["Apple", "Orange", "Pear", "Peach", "Strawberry", "Cherry", "Acai"];
        
        for (let word of fruits) {
            console.info("working on word", word);
            
            for (let letter of word.split('')) {

              console.info("  looking at letter", letter);

              if (letter == "a" || letter == "e" || letter == "i" || letter == "o" || letter == "u") {
                  vowels += 1;
              }
              else {
                  consonants += 1;
              }
              console.info("  up to now i found", vowels, "vowels and", consonants, "consonants");
            
            }
        }

Это все еще не считает прописные буквы. Но я уверен вы можете исправить это.

«Работая над словом Apple, глядя на букву Apple, до сих пор я нашел 0 гласных и 0 согласных» кажется неверным в качестве вывода

Mark Schultheiss 17.02.2023 19:00

Да, точно. ОП должен решить, хотят ли они обрабатывать отдельные письма и как....

bjelli 17.02.2023 19:24

Мне нужно подсчитать каждую букву в каждом слове и журнал консоли, сколько гласных и согласных в каждом слове, когда оно идет вниз по массиву

LightningFireZC 18.02.2023 11:11

Другие вопросы по теме