Почему массив четных чисел содержит пустые значения?
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]
Значение должно быть присвоено при выполнении условия if. Почему значение присваивается, когда проверка условия не удалась?
Поскольку вы проходите по одному элементу исходного массива за раз, а при построении второго массива вы помещаете четные числа в те же позиции индекса, что и исходный массив (индексы 1, 3 и 5). Это оставляет индексы 0, 2 и 4 неопределенными. Вместо того, чтобы делать то, что вы делаете, просто поместите совпадения в новый массив. Я думаю, что кто-то ранее оставил комментарий о том, как сделать это с помощью .push()
, но сейчас его нет.
Большое спасибо! Теперь я понимаю, как цикл формирует массив. Еще раз спасибо.
это потому, что вы назначаете по индексу 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]));
Потому что, просматривая каждый элемент массива и проверяя его, вы добавляете в новый массив только четное число и пропускаете его, когда оно нечетное, оставляя новую запись массива для нечетных мест как неопределенную.