Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему я никак не могу решить подобные задачи на JS?

Front End Ученик (27), на голосовании 1 месяц назад
 Напишите функцию filterEvenNumbers(arr), которая принимает массив чисел и возвращает новый массив, содержащий только четные числа из исходного массива.
Вроде бы уже знаю хорошо функции, циклы и тд но никак не могу решить эту задачу, может я неправильно изучаю JS?
Голосование за лучший ответ
Муравей Лучше Мастер (2476) 2 месяца назад
почему у меня вопросы на глав странице не видно??
саня вася Мастер (1407) 2 месяца назад
Тебе нужно: создать динамический массив "массив1", потом циклом foreach пройти по всем элементам исходного массива, в случае, если число четное - добавляешь его в массив1, после прохода всего массива возвращаешь массив1.
Либо проще (JS):

function checkEven(raw) {
return raw.filter(r => r % 2 === 0);
}
Павел МихаловскийПросветленный (36173) 2 месяца назад
Лучше бы конечно, чтобы он сам думал, а не брал решения из инета
саня вася Мастер (1407) Павел Михаловский, сам написал, но т.к. JS не знаю использовал конвертер =D
Евгений Мудрец (19405) 2 месяца назад
а в чем проблема возникает?
Front EndУченик (27) 2 месяца назад
В логике, я знаю как работают циклы и функции, но не знаю как, когда и где их применять. Ещё когда вижу задачу, не знаю как её решить, что для этого нужно применять
ЕвгенийМудрец (19405) 2 месяца назад
тут надо учиться думать по другому, а лучший способ решать задачки. Я к примеру использую сайт codewars. После выполнения он показывает другие варианты решения задачки, очень полезно изучать другие варианты
Павел Михаловский Просветленный (36173) 2 месяца назад
Само знание языка тебе ничего не даст. Вот на таком и начинается программирование. Когда у тебя есть задача и тебе надо придумать алгоритм её решения.
Попробуй для начала проговорить решение задачи
Angressi Мастер (1237) 2 месяца назад
Функция должна принимать массив, проверять каждый элемент, и если он чётный, возвращать его в новый массив. Чтобы сделать это, можно использовать либо цикл, либо метод filter, который идеально подходит для таких случаев.
-
function filterEvenNumbers(arr) {
return arr.filter(num => num % 2 === 0);
}
-
Мы используем метод .filter(), который проходит по массиву и возвращает новый массив с элементами, которые удовлетворяют условию.
В нашем случае это условие — чётность числа: num % 2 === 0.
-
Может быть, ты пытаешься усложнить себе решение, например, думаешь о циклах там, где можно использовать встроенные методы. Пойми, что задачи можно решать по-разному, и часто встроенные методы решают задачу короче и проще.
Арсений Маркович Мудрец (11661) 2 месяца назад
Не знаю, у меня алгоритм решения как-то сам в голове возникает. Типа написать функцию которая на вход принимает массив. Первое предложение. Ну это не сложно, тут только знание языка. Далее видимо нужно пробежаться по массиву, и проверить числа на четность. И если числа четные то записать в новый массив. Дальше нужно решить чисто техническую проблему с тем, что мы не знаем сколько там четных и сколько нечетных чисел, поэтому не знаем количество элементов в новом массиве. Можно по разному делать, можно два раза пробежаться по массиву, один раз посчитать количество четных чисел, а потом создать массив с таким количеством чисел, и на втором проходе уже заполнить. Ну или позвращаться с динамическим добавлением элементов в массив.
Semen Kapacuk Гуру (3750) 2 месяца назад
Работа программиста это придумывание решения задачи, язык программирования это просто язык, что именно на нем написать нужно придумать сначала
Андрей Устинов Мастер (2150) 2 месяца назад
Самый понятный способ
 const evenNumbers = (array) => { 
const newArray = []
for (let num of array) {
if (num % 2 === 0) {
newArray.push(num)
}
}
return newArray
}
А вот более эффективный с reduce
 const evenNumbers = (array) => { 
return array.reduce((acc, curr) => curr % 2 === 0 ? [...acc, curr] : acc, [])
}
Если есть проблема с решением элементарных задач, значит, ты не изучил язык достаточно, чтобы переходить к практике.
Андрей УстиновМастер (2150) 2 месяца назад
Еще проще можно с filter сделать
 const evenNumbers = (array) => { 
return array.filter(num => num % 2 === 0)
}
(Позабыл его с просони.)
Рик Санчес Гуру (3741) 2 месяца назад
 const filterEvenNumbers = (arr) => arr.filter(item => item % 2 === 0); 
Павел Просветленный (25618) 2 месяца назад
Со временем, если будешь достаточно практиковаться, всё встанет на свои места. Ты "вроде" знаешь теорию но на первой практике сложно связать всё воедино. Уверен что так у всех. У меня было точно так же.
Но судя по твоим вопросам, ты "функции, циклы и т.д." знаешь не достаточно хорошо. В одном из вопросов писал что не знаешь цикла "for", хотя это основа основ.
Советую тебе решать разного рода задачи, начиная от лёгких и постепенно увеличивая сложность. Те задачи что даются тебе с трудом - разделяй на подзадачи.

Как пример возьмём твою задачу.
Помним что кроме самой функции нас ничего интересует. На ввод принимается массив, на вывод - изменённый массив.Далее расписываем алгоритм действий. Ставим вопрос - какие действия необходимы чтобы решить задачу? С каких начать? Как прочитать значение массива? Как проверить значение на "чётность"? Как добавить его в новый массив?
Для ответа на эти вопросы, тебе необходимо знать циклы и как они применяются. Нужны знания о массивах и их базовых методах и как создавать переменные и считывать/записывать данные в массив. Ну и для определения чётного числа необходимо знать математические операторы. В данном случае % (modulus -> остаток после деления).
Если что-то из этого не знаешь, то параллельно придётся искать информацию во время решения задачи. Я сам не всегда всё знаю/помню и частенько заглядываю в документацию.
Пишем все шаги на простом русском:
  1. Создаём пустой массив для последующего добавления в него чётных чисел.
  2. Считываем следующий элемент предоставленного нам массива.
  3. Проверяем является ли он чётным.
  4. В случае чётного числа добавляем его в созданный нами массив.
  5. Проверяем достигли ли мы конца массива.
  6. Повторяем 2.
  7. Выводим изменённый массив.

Надо понимать что массивы всегда сопровождаются циклами, так как ты не можешь сразу прочесть весь массив и сравнить все значения. Одно действие за раз.
Реализуем:Пояснения:
Front EndУченик (27) 2 месяца назад
Спасибо за подробное объяснение
Похожие вопросы