- Как извлечь четные элементы массива?
- Ответы (8)
- Как вывести только четные значения массива, не создавая новый массив?
- Функция должна проверять, какие числа четные, объясните почему не работает?
- Программа JavaScript для печати четных чисел в массиве
- Способ 1: Использование цикла for
- Способ 2: использование цикла while
- Способ 3: использование цикла forEach
- Способ 4: Использование метода фильтра
- Как извлечь четные элементы массива?
- 8 ответы
Как извлечь четные элементы массива?
http://jsbin.com/unocar/2/edit Я пробовал этот код для вывода четных (индексных) элементов массива. Это работает, но также выводит некоторые пустые элементы. Как исправить этот код, чтобы выводить только существующие элементы?
Ответы (8)
Примечание. Ваш код фактически берет элементы с нечетными индексами из массива. Если это то, что вы хотите, вы должны использовать i % 2 === 1 или начать цикл с var i = 1 соответственно.
наверное, я неправильно сказал. я имел в виду порядковый номер элементов, например, 5 — второй, 8 — четвертый и так далее. — person DrStrangeLove; 30.08.2011
var arr = [4,5,7,8,14,45,76]; var filtered = arr.filter(function(element, index, array) < return (index % 2 === 0); >);
if (!Array.prototype.filter) < Array.prototype.filter = function(fun /*, thisp */) < "use strict"; if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (typeof fun !== "function") throw new TypeError(); var res = []; var thisp = arguments[1]; for (var i = 0; i < len; i++) < if (i in t) < var val = t[i]; // in case fun mutates this if (fun.call(thisp, val, i, t)) res.push(val); >> return res; >; >
var arr = [4, 5, 7, 8, 14, 45, 76,5]; let filtered=arr.filter((a,i)=>i%2===1); console.log(filtered);
Это не сработает, если в массиве есть повторяющиеся элементы. — person Craig Riecke; 28.02.2019
Даже если этот вопрос довольно старый, я хотел бы добавить однострочный фильтр:
Нечетные числа: arr.filter((e,i)=>i%2)
Четные числа: arr.filter((e,i)=>i%2-1)
Более «законный» способ для четных чисел: arr.filter((e,i)=>!(i%2)) Нет необходимости проверять i%2===1 , как сказал sumit; поскольку mod 2 уже возвращает 0 или 1 в виде чисел, их можно интерпретировать как логические значения в js.
Я просто хотел объяснить, почему ваш результат не такой, как вы ожидали, поскольку все остальные показывают отличные решения. Вы выполняете итерацию по размеру массива N, поэтому ваш результирующий массив попытается вставить элементы в массив, который приведет к размеру N. Поскольку в исходном массиве будет найдено только N/2, ваш результирующий массив заполнит остальные пробелами для заполнения в остальной части N. Итак, если вы проверили, существует ли a[2*i] ИЛИ проверили, существует ли a[i] % 2 == 0 перед вставкой, ваш результирующий массив будет содержать только четные индексированные значения
var arr = [4,5,7,8,14,45,76]; function even(a) < var ar = []; for (var i=0; i> return ar; > alert(even(arr));
Как вывести только четные значения массива, не создавая новый массив?
Выводится только первое значение массива, как исправить на вывод всех четных элементов массива?
function find (arr) < for(let i=0; i < arr.length; i++)< if(arr[i] % 2 === 0)< return arr[i] >> > let result = find ([2,3,4,6,8]);
если не хочешь создавать новый массив, то пройди forEach , в каждой итерации console.log если элемент подходящий
при срабатывании return функця завершает работу, цикл не продолжается.
Уточните что вы подразумеваете под «вывести» и что под «не создавая новый массив».
Можно отфильтровать нативным Array.filter() но при этом создается новый массив.
const result = arr.filter(n => !n%2);
Если «вывести», это просто в консоль, то достаточно в вашем коде вместо return написать console.log(arr[i])
Спасибо за обратную связь! я мог бы создать переменную с новым массивом и в нее добавить через push четные элементы, но мне надо из имеющегося массива взять только четные элементы и вывести их. «Вывести» это чтобы через return пришел массив с четными числами. Через фильтр не подходит, т.к. в задаче просится именно через цикл сделать.
all_1234, если у вас условие «не создавать новый массив», то единственный вариант — удалить нечетные из существующего массива.
Если такого условия нет, то создавайте свою переменную, в чем вопрос тогда?
Функция должна проверять, какие числа четные, объясните почему не работает?
Потому что первый же return прерывает выполнение функции.
По сути ваша функция проверяет являются ли все числа в массиве четными.
Если в массиве встретится хотя бы одно нечетное число, то она вернет false.
ваш вопрос подразумевает проверку каждого числа. А функция возвращает булево значение (да/нет). Как можно ответить на несколько проверок одним утверждением «да» или «нет»?
Вы бы поподробнее объяснили что вам нужно и в каком виде требуется результат.
Ваша функция не проверяет, какие числа четные — она отвечает на вопрос, все ли числа массива четные
Если нужно вывести четные числа, то попробуйте хотя бы так:
Поставьте проверку условия, не (elem % 2 === 1), а (elem % 2 !== 0). В Вашем случае происходит проверка наличия числа в массиве, которое без остатка делится на 1. А нужно проверять, чтобы числа без остатка делились на 0. Если после этой проверки выскочит false, то значит, что у Вас в массиве есть число, которое не делиться на 0 без остатка — нечетное.
function isTrue(arr) < for (let elem of arr) < if (elem % 2 !== 0) < return false; >> return true; >
Поставьте проверку условия, не (elem % 2 === 1), а (elem % 2 !== 0). В Вашем случае происходит проверка наличия числа в массиве, которое без остатка делится на 1. А нужно проверять, чтобы числа без остатка делились на 0. Если после этой проверки выскочит false, то значит, что у Вас в массиве есть число, которое не делиться на 0 без остатка — нечетное.
Нужно чётко формулировать желания. На английском )
У массивов есть встроенные методы, которыми удобно решать задачи.
Хочется узнать, все ли элементы массива чётные? «Все» — «every»
arr.every( item => (item & 1) === 0 )
Узнать, какие элементы массива чётные? Что в результате получить.. Только четные элементы – значит, отфильтровать искомое, «filter»: arr.filter( item => (item & 1) === 0 )
Функциям хорошо бы давать понятные названия. В примерах выше одна и та же функция определяет четность очередного item’а. Можно её сделать отдельной функцией: const isEven = num => (num & 1) === 0; тут проверяется последний бит числа, если он 0 , значит, число четное. Годится только для небольших 32-битных целых.
Примеры станут лаконичнее:
arr.every(isEven) // false arr.filter(isEven) // [2, 4, 6, 8, 10]
Программа JavaScript для печати четных чисел в массиве
Программирование и разработка
Дан массив чисел, и задача состоит в том, чтобы написать программу на JavaScript для вывода всех четных чисел в этом массиве. Мы будем использовать следующие методы для поиска четных чисел в массиве:
- Использование для цикла
- Использование цикла while
- Использование цикла forEach
- Использование метода фильтра
Input: numbers_array1= [4, 76, 89, 61, 72, 64] Output: [4,76,72,64] Input: numbers_array2= [15, 60, 90, 14, 7, 45] Output: [60,90,14]
Способ 1: Использование цикла for
- Переберите каждый элемент в массиве, используя цикл for, чтобы проверить, является ли (число %2==0) условие для проверки четным или нет.
- Если условие выполнено, вставьте число в четный список.
- После перебора всех элементов массива выведите четный список.
Even numbers in an array are: 10,12
Способ 2: использование цикла while
- Перебрать массив с помощью цикла while.
- Проверяем элементы, если условие (element%2==0) удовлетворяет, мы помещаем элемент в четный массив.
- После перебора всех элементов с помощью цикла while мы печатаем массив четных чисел.
Even numbers in an array are: 44,26,48,64
Способ 3: использование цикла forEach
- Объявите массив с именем «numbers», содержащий набор целых чисел.
- Объявите пустой массив с именем «четный».
- Используйте метод forEach для перебора каждого элемента в массиве «numbers».
- В цикле forEach используйте оператор if, чтобы проверить, использует ли текущий элемент даже оператор модуля (элемент% 2 == 0).
- Если элемент четный, используйте метод push, чтобы добавить его в «четный» массив.
- После цикла forEach используйте console.log() для вывода сообщения «Четные числа в массиве: [четные числа]», где [четные числа] — массив четных чисел.
Такой подход позволяет перебирать весь массив, проверять каждый элемент на четность и добавлять четные числа в отдельный массив, который затем отображается в консоли.
Even numbers in an array are: 86,90,24
Способ 4: Использование метода фильтра
- Объявите массив с именем «numbers», содержащий набор целых чисел.
- Используйте метод filter() для массива «numbers», передав функцию обратного вызова в качестве аргумента.
- Функция обратного вызова должна принимать текущий элемент в качестве параметра и использовать оператор модуля (элемент% 2 == 0), чтобы проверить, является ли он четным.
- Верните true для четных чисел и false для нечетных чисел в функции обратного вызова.
- Назначьте возвращаемый результат метода фильтра переменной, скажем, «evenNumbers».
- После метода filter используйте console.log() для отображения сообщения «Четные числа в массиве: [evenNumbers]», где [evenNumbers] — массив четных чисел, возвращаемый методом filter.
Метод filter возвращает новый массив со всеми элементами, прошедшими проверку, реализованную функцией обратного вызова.
Как извлечь четные элементы массива?
Я пробовал этот код для вывода четных (индексных) элементов массива. Это работает, но также выводит некоторые пустые элементы. Как исправить этот код, чтобы выводить только существующие элементы?
8 ответы
или пропустить каждый второй элемент, увеличив i соответственно:
Обратите внимание: Ваш код фактически принимает элементы с странный индексы из массива. Если это то, что вы хотите, вы должны использовать i % 2 === 1 или начать цикл с var i = 1 соответственно.
наверное, я неправильно сказал. я имел в виду порядковый номер элементов, например, 5 — второй, 8 — четвертый.. и так далее.. — DrStrangeLove
начать со второго элемента: for(var i = 1; — Дрюдро
var arr = [4,5,7,8,14,45,76]; var filtered = arr.filter(function(element, index, array) < return (index % 2 === 0); >);
С запасным вариантом для старых IE все остальные браузеры работают без этого запасного варианта.
if (!Array.prototype.filter) < Array.prototype.filter = function(fun /*, thisp */) < "use strict"; if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (typeof fun !== "function") throw new TypeError(); var res = []; var thisp = arguments[1]; for (var i = 0; i < len; i++) < if (i in t) < var val = t[i]; // in case fun mutates this if (fun.call(thisp, val, i, t)) res.push(val); >> return res; >; >
Это будет работать в 2018 году 🙂
взять нечетные индексы и применить к фильтру
var arr = [4, 5, 7, 8, 14, 45, 76,5]; let filtered=arr.filter((a,i)=>i%2===1); console.log(filtered);
ответ дан 01 мар ’19, в 08:03
Это не сработает, если в массиве есть повторяющиеся элементы. — Крейг Рике
Даже если этот вопрос довольно старый, я хотел бы добавить однострочный фильтр:
Нечетные числа: arr.filter((e,i)=>i%2)
Четные числа: arr.filter((e,i)=>i%2-1)
Более «законный» способ для четных чисел: arr.filter((e,i)=>!(i%2))
Нет необходимости проверять с i%2===1 как сказал самит; в качестве mod 2 уже возвращает 0 или 1 как числа, их можно интерпретировать как логические значения в js.
Если вы хотите, вы можете использовать i&1 вместо i%2 . Это может повысить производительность на больших массивах.
почему бы вам не попробовать с оператором %. Это дает вам остаток дивизии.
var arr = [4,5,7,8,14,45,76]; function even(a) < var ar = []; for (x in a) < if((a[x]%2)==0) ar.push(a[x]); >return ar; > alert(even(arr));
@Felix Kling: извините .. я не знал об этом .. 🙂 спасибо за ссылку — Митхун Сатиш
Я просто хотел объяснить, почему ваш результат не такой, как вы ожидали, поскольку все остальные показывают отличные решения. Вы выполняете итерацию по размеру массива N, поэтому ваш результирующий массив попытается вставить элементы в массив, который приведет к размеру N. Поскольку в исходном массиве будет найдено только N/2, ваш результирующий массив заполнит остальные пробелами для заполнения в остальной части N. Итак, если вы проверили, существует ли a[2*i] ИЛИ проверили, существует ли a[i] % 2 == 0 перед вставкой, ваш результирующий массив будет содержать только четные индексированные значения
Проверять элементы на ровность нужно так:
var arr = [4,5,7,8,14,45,76]; function even(a) < var ar = []; for (var i=0; i> return ar; > alert(even(arr));
%2 — это оператор по модулю, он возвращает остаток от целочисленного деления.
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками javascript arrays or задайте свой вопрос.