Почему массив четных чисел содержит пустые значения?

Почему массив четных чисел содержит пустые значения?

function getEvenNumbers(arr) {
  const evenNumbers = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] % 2 === 0) {
      evenNumbers[i] = arr[i]
    }
  }
  return evenNumbers;
}
console.info(getEvenNumbers([1, 2, 3, 4, 5, 6]));

вывод консоли: [пусто, 2, пусто, 4, пусто, 6]

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

j08691 11.04.2024 16:47

Значение должно быть присвоено при выполнении условия if. Почему значение присваивается, когда проверка условия не удалась?

Sergei 11.04.2024 17:00

Поскольку вы проходите по одному элементу исходного массива за раз, а при построении второго массива вы помещаете четные числа в те же позиции индекса, что и исходный массив (индексы 1, 3 и 5). Это оставляет индексы 0, 2 и 4 неопределенными. Вместо того, чтобы делать то, что вы делаете, просто поместите совпадения в новый массив. Я думаю, что кто-то ранее оставил комментарий о том, как сделать это с помощью .push(), но сейчас его нет.

j08691 11.04.2024 17:54

Большое спасибо! Теперь я понимаю, как цикл формирует массив. Еще раз спасибо.

Sergei 12.04.2024 05:55
Поведение ключевого слова "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) для оценки ваших знаний,...
3
4
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

это потому, что вы назначаете по индексу i

function getEvenNumbers(arr) {
    const evenNumbers = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] % 2 === 0) {
            evenNumbers[i] = arr[i]
        }
    }
    return evenNumbers;
}
console.info(getEvenNumbers([1,2,3,4,5,6]));

или учитывая этот массив

evenNumbers[1] = 2
evenNumbers[3] = 4
evenNumbers[5] = 6

с JavaScript, заполняющим пустое пространство. вместо этого вам следует использовать evenNumbers.push(arr[i])

Это потому, что вы присваиваете значение i-му индексу массива. Поскольку нечетное значение пропускается, оно выглядит как empty. Вы можете помещать четные числа в массив evenNumbers.

function getEvenNumbers(arr) {
    const evenNumbers = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] % 2 === 0) {
            evenNumbers.push(arr[i])
        }
    }
    return evenNumbers;
}
console.info(getEvenNumbers([1,2,3,4,5,6]));

Более того, вы можете использовать функцию Array.filter() для выполнения той же работы.

function getEvenNumbers(arr) {
    return arr.filter(n=>n%2===0);
}
console.info(getEvenNumbers([1,2,3,4,5,6]));

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