Мы хотим получить из массива каждый второй элемент. Как это сделать?
У нас есть массив:
let massiv = [1,2,3,4,5,6,7,8,9,10];
Мы взяли массив из чисел для простоты восприятия.
Использование метода filter()
Из документации мы знаем, что метод filter() может принимать ДВА параметра. Первый обязательный — это функция обратного вызова, выполнение которой должно приводить к получению логического значения true или false. Её нам будет достаточно.
Эта функция обратного вызова может принимать ТРИ параметра:
- значение элемента
- индекс элемента
- просматриваемый (обходимый) объект
Для решения задачи нам будет достаточно передать первые два параметра. Если быть точнее, то нам нужен только второй параметр, но к сожалению, мы не можем передать только его одного. Индексы любого «нормального» массива начинаются с 0 (нуля) и увеличиваются на 1 для каждого элемента массива.
Это значит, что нам нужны индексы массива под номерами 1, 3, 5, 7 … и так далее.
Решить задачу нам поможет оператор остатка от деления — %, который будет возвращать нам какое-то целое число, которое в последствии будет приведено к логическому типу. Выглядеть это будет так:
let massiv = [1,2,3,4,5,6,7,8,9,10]; massiv.filter((item, index) => index % 2); [2, 4, 6, 8, 10]
Как это работает?
Давайте по шагам посмотрим на преобразования.
Сначала в коллбэк придёт индекс под номером НОЛЬ.
0 % 2
Данное выражение возвращает нам число 0. Наш коллбэк попытается привести НОЛЬ к логическому типу и мы получим false. Метод filter() посмотрит на false и не добавит элемент массива в новый массив. Элемент со значением 1 будет выброшен. Далее ситуация будет чередоваться:
Не трудно догадаться, что подобное чередование остатков от деления всегда будет преобразовываться в чередование true и false. Элемент под индексом 1 будет ВТОРЫМ элементом массива. Индекс 1 вернёт нам остаток от деления в виде числа 1, которое будет преобразовано в true и в результате мы получим второй элемент массива в новый массив. Ситуация будет повторяться до самого конца массива и в итоге мы получим новый массив, который будет состоять только из вторых элементов оригинального массива.
Альтернативное универсальное решение
Если нам нужно будет написать функцию, в которую мы будем передавать нужный нам шаг получения элементов массива, то тогда выражение примет немного иной вид.
Вместе с остатком от деления мы будем использовать отрицание и группировку. Выглядеть это будет так:
let massiv = [1,2,3,4,5,6,7,8,9,10]; massiv.filter((item, index)=>!((index+1)%2));
Функция получения каждых N-ых элементов массива
function everyN (array, n){ return array.filter((item, index)=>!((index+1)%n)); }
Пример работы функции:
Информационные ссылки
JavaScript | Как получить каждый третий элемент массива?
Стандарт ECMAScript — Раздел «23.1.3.8 Array.prototype.filter ( callbackfn [ , thisArg ] )» — https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.filter
Стандарт ECMAScript — Раздел «13.7 Multiplicative Operators» — https://tc39.es/ecma262/multipage/ecmascript-language-expressions.html#sec-multiplicative-operators
Узнай цену своей работы
Формулировка задачи:
Задан массив размером N. Вывести на печать каждый второй элемент массива.
Код к задаче: «Вывести на печать каждый второй элемент массива»
textual
Листинг программы
for (int i = 1; i < mass.Length; i+=2)
Полезно ли:
15 голосов , оценка 4.467 из 5
Похожие ответы
- Вывести элемент массива, если он равен тмоу же элементу во втором массиве
- Найти и вывести на экран произведение всех элементов в каждой строке двумерного массива
- В каждой строке двумерного массива поменять первый нулевой элемент и последний отрицательный
- Массив: Вывести в начале элементы массива с чётными номерами, а потом с нечетными…
- Для каждой строки ступенчатого массива подсчитать количество положительных элементов
- Заполнить массив и прибавить к каждому элементу массива сумму индексов этого элемента
- Вывести сумму индексов четных элементов массива
- Поменять местами наиб и наим элемент в каждой строке двумерного массива
- Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами
- Найти максимальный элемент массива и отклонение от максимального для каждого из элементов
- Из каждого элемента массива номер которого кратен К вычесть М. Ко всем остальным элементам прибавить М
0 / 0 / 0 Регистрация: 17.01.2013 Сообщений: 41 |
|
1 |
|
Вывести на печать каждый второй элемент массива31.01.2013, 23:11. Показов 8790. Ответов 2
Задан массив размером N. Вывести на печать каждый второй элемент массива.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
31.01.2013, 23:11 |
Ответы с готовыми решениями: Сформировать массив B, записав в него каждый второй элемент массива А Как вывести каждый элемент массива Есть массив строк. Вывести второй по величине элемент целочисленного массива Создать очередь и удалить из нее каждый второй элемент 2 |
GOLD 124 / 37 / 6 Регистрация: 14.01.2012 Сообщений: 264 |
||||
31.01.2013, 23:51 |
2 |
|||
Сообщение было отмечено nfnmzyf1406 как решение РешениеНе флуди одинаковыми темами, хоть они и с разными заданиями.
0 |
andrew_w2k 340 / 340 / 90 Регистрация: 04.03.2010 Сообщений: 648 |
||||
01.02.2013, 00:02 |
3 |
|||
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
01.02.2013, 00:02 |
Помогаю со студенческими работами здесь Сжать массив, выбросив из него каждый второй элемент Дан целочисленный массив из n элементов. Сжать… Создать массив: первый элемент равен A, второй равен B, а каждый последующий элемент равен сумме всех предыдущих Написать и протестировать метод, который заменяет каждый второй элемент в строке на заданный символ Заменить последний положительный элемент на второй элемент массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 3 |
I’m trying to improve my JavaScript skills. Using a for loop I want to select every second element (for example I want to make them bold or italic). I know I can do this using CSS3 and the nth-child
selector, but as I said, I’m trying to improve my JS skills and I want to do this using a for
loop and no foreach
loop or another JS loop type. I’m new in JS.
edit:I want to add all element but i just want to pick up every second element to make them bold or italic
var myList = document.getElementById('myList');
var addList = ["Python", "C", "C++", "Ruby", "PHP", "Javascript", "Go", "ASP", "R"];
for (var i = 0; i < addList.length; i++) {
var newLi = document.createElement("li");
newLi.innerHTML = addList[i];
myList.appendChild(newLi);
}
<ul id="myList"></ul>
NullPointer
6,9644 gold badges26 silver badges40 bronze badges
asked Aug 13, 2018 at 10:32
Use modulus(%)
operator to get every 2nd element
in loop and add fontStyle
on it:
var myList = document.getElementById('myList');
var addList = ["Python", "C", "C++", "Ruby", "PHP", "Javascript", "Go", "ASP", "R"];
for (var i = 0; i < addList.length; i++) {
var newLi = document.createElement("li");
newLi.innerHTML = addList[i];
if(i%2==0){
newLi.style.fontStyle = "italic"
newLi.innerHTML = "<strong>"+addList[i]+"</strong>";
}
myList.appendChild(newLi);
}
<ul id="myList"></ul>
answered Aug 13, 2018 at 10:50
NullPointerNullPointer
6,9644 gold badges26 silver badges40 bronze badges
2
In your for loop, instead of increasing i
by 1, increase i
by two on every iteration with i+=2
.
Updated code:
var myList = document.getElementById('myList');
var addList = ["Python", "C", "C++", "Ruby", "PHP", "Javascript", "Go", "ASP", "R"];
for (var i = 0; i < addList.length; i+=2) {
var newLi = document.createElement("li");
newLi.innerHTML = addList[i];
myList.appendChild(newLi);
}
<ul id="myList"></ul>
answered Aug 13, 2018 at 10:35
JSON DeruloJSON Derulo
8,5895 gold badges32 silver badges50 bronze badges
2
In your for
loop, instead of i++
, use i += 2
.
answered Aug 13, 2018 at 10:34
hszhsz
147k61 gold badges258 silver badges313 bronze badges
3
You could add something like this to the loop body:
if (i % 2 == 1) {
// whatever you need to do to make it bold or italic
}
This will be called for every odd value of i
.
answered Aug 13, 2018 at 10:51
Frank PufferFrank Puffer
8,0952 gold badges20 silver badges43 bronze badges
Simply use i+=2 in place of i++ in your loop
answered Aug 13, 2018 at 10:37
p up u
1,3831 gold badge17 silver badges29 bronze badges
3
To add all elements and pick up every 2nd element, use the modulo operator %
in if
statement: i % 2 == 0
and change the fontStyle
.
Updated code:
var myList = document.getElementById('myList');
var addList = ["Python", "C", "C++", "Ruby", "PHP", "Javascript", "Go", "ASP", "R"];
for (var i = 0; i < addList.length; i+=2) {
var newLi = document.createElement("li");
if (i % 2 == 0) {
// make bold
newLi.style.fontStyle = "bold"
// make italic
newLi.style.fontStyle = "italic"
}
newLi.innerHTML = addList[i];
myList.appendChild(newLi);
}
<ul id="myList"></ul>
answered Aug 13, 2018 at 10:39
Audwin OyongAudwin Oyong
2,2073 gold badges14 silver badges32 bronze badges
1
Есть массив lst
, нужно каждый n-ный
элемент массива отправить в другой массив. Пробовал делать так:
for i in range(0, len(lst[0])):
if lst[0][i] % 10 = 0 then new_list.append(lst[0][i])
Использую lst[0][i]
потому что это массив с одной строкой, в этой строке все элементы.
Но выдает ошибку SyntaxError: invalid syntax
задан 9 апр 2017 в 11:01
2
Шаг цикла берётся таким образом:
for i in range(0, 11, 2):, где 2 - шаг цикла
print(i)
Но если вы просто хотите создать новый массив, то я предлагаю вам следующую форму записи, которая решает вашу задачу, применимую и к строкам, и к массивам:
s = 'somestring'
s = s[::2] # эквивалентно [0::2]
lst = [1, 2, 3, 4, 5, 6]
lst = lst[::2] #[стартовый индекс:конечный индекс:шаг]
# если ничего не указано, то [0:-1:1]
ответ дан 9 апр 2017 в 11:06
Берём срез всех элементов списка a
с шагом n
.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = int(input())
b = a[::n]
print(b)
ответ дан 9 апр 2017 в 11:04
Кирилл МалышевКирилл Малышев
10.8k1 золотой знак18 серебряных знаков34 бронзовых знака