Мы хотим получить из массива каждый третий элемент. Как это сделать?
У нас есть массив:
let massiv = [1,2,3,4,5,6,7,8,9,10];
Мы взяли массив из чисел для простоты восприятия, чтобы результат был более наглядным.
Использование метода filter()
Из документации мы знаем, что метод filter() может принимать ДВА параметра. Первый обязательный — это функция обратного вызова, выполнение которой должно приводить к получению логического значения true или false. Её нам будет достаточно.
Эта функция обратного вызова может принимать ТРИ параметра:
- значение элемента
- индекс элемента
- просматриваемый (обходимый) объект
Для решения задачи нам будет достаточно передать первые два параметра. Если быть точнее, то нам нужен только второй параметр, но к сожалению, мы не можем передать только его одного. Индексы любого «нормального» массива начинаются с 0 (нуля) и увеличиваются на 1 для каждого элемента массива.
Это значит, что нам нужны индексы массива под номерами 2, 5, 8, 11 … и так далее.
Решить задачу нам поможет оператор остатка от деления — %, который будет возвращать нам какое-то целое число, которое в последствии будет приведено к логическому типу. Он отлично отработает так как все индексы массива являются целыми числами. Но его одного не достаточно. Ему на помощь должен прийти оператор отрицания — ! и оператор «приоритета выполнения операции / группировки» — ( ). И ещё будет оператор сложения — +.
Выглядеть это будет так:
let massiv = [1,2,3,4,5,6,7,8,9,10]; massiv.filter((item, index)=>!((index+1)%3)); [3, 6, 9]
Как это работает?
Первый вызов коллбэка
Давайте по шагам посмотрим на преобразования. Сначала в коллбэк придёт индекс под номером НОЛЬ.
Первыми выполнятся действия с самых глубоких скобках:
(index+1)
Это выражение вернёт нам 1. Затем выполнится получение остатка от деления:
(0+1)%3 или 1%3
После этого будет выполнен оператор отрицания, который вернёт нам значение false.
В результате в новый массив не попадёт первый элемент.
Второй вызов коллбэка
Во второй раз выражение (index+1) будет эквивалентно 1+1, что в итоге вернёт 2. Затем выполнится получение остатка от деления:
(1+1)%3 или 2%3
После этого будет выполнен оператор отрицания, который вернёт нам значение false.
В результате в новый массив не попадёт второй элемент.
Третий вызов коллбэка — Успешный
В третий раз выражение (index+1) будет эквивалентно 2+1, что в итоге вернёт 3. Затем выполнится получение остатка от деления:
(2+1)%3 или 3%3
После этого будет выполнен оператор отрицания, который вернёт нам долгожданное значение true.
Истина позволит третьему элементу массива попасть в новый массив. После этого ситуации будут циклически повторяться до самого конца массива.
Информационные ссылки
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
Стандарт ECMAScript — Раздел «13.2.9 The Grouping Operator» — https://tc39.es/ecma262/multipage/ecmascript-language-expressions.html#sec-grouping-operator
Стандарт ECMAScript — Раздел «13.5 Unary Operators» — https://tc39.es/ecma262/multipage/ecmascript-language-expressions.html#sec-unary-operators
Данный код php выводит (Обозначает классом) каждый третий элемент . Применялся для нахождения каждого третьего в bitrix при выводе элементов каталога.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php $count=1; foreach($arResult[“ITEMS”] as $arItem):?> <li class=“news-item <?php if(($count+1) % 3 == 1 ) { echo ‘tretiy_element’; } ?>“ id=“<?=$this->GetEditAreaId($arItem[‘ID’]);?>“> ..... </li> <?php //если после третьего элемента конце добавить класс очистки if(($count) % 3 == 1 ) {?> <div class=“clear”></div> <?php } ?> <?endforeach;?> |
Как вывести третий элемент массива?
имеем массив
Array
(
[0] => 1
[5] => 10
[1] => 110
[2] => 123
[3] => 234
[4] => 345
)
как получить третий элемент массива, т.е. 110?
-
Вопрос заданболее трёх лет назад
-
3863 просмотра
echo array_slice($array, 2, 1)[0];
// or
echo array_values($array)[2];
Первый вариант лучше
Пригласить эксперта
По ключу напрямую или через цикл с счётчиком.
-
Показать ещё
Загружается…
22 мая 2023, в 18:02
3000 руб./в час
24 мая 2023, в 16:29
1200 руб./в час
24 мая 2023, в 16:05
2000 руб./за проект
Минуточку внимания
создан статический массив. могу показать весь код программы.
///////////////////////// b++; if (b == 1) { darray = (int*)calloc(b, sizeof(int)); } else darray = (int*)realloc(darray, b*sizeof(int)); // izmaina darray[b - 1] = Array[i]; printf("Dinamiskais masivs: "); for (d = 0; d <= b; d = d + 3) { printf("t%d ", darray[d - 1]); }
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <tchar.h> int main() { int N, i, Array[100], d; // i - ciklam, N - elementiem int *darray; // dinamiskais masivs int b = 0; // dinamiska masiva izmers char ch, atk; // atkartosanai do { b = 0; do { printf("Ievadiet masiva izmeru : "); scanf("%d", &N); if (N > 100) { // masiva izmers parsniegts 100 > printf("Masiva izmers nedrikst parsniegt 100.n"); } else if (N <= 0) { // masiva izmers ir mazaks vai vienads ar nulli printf("Masiva izmers nedrikst but vienads vai mazaks par nullin" ); } } while (N > 100 || N <= 0); do { flushall(); printf("nIevadiet masivu manuali vai random? Yes or No (y,n): "); scanf("%c", &atk); if (atk != 'y' && atk != 'n') printf("nIevadiet 'y' vai 'n'!"); else break; } while (atk != 'y' && atk != 'n'); // RANDOM if (atk == 'n') { for (i = 0; i < N; i++) { Array[i] = (rand() % 100 + 1); printf("[%d] elements: %dn", i + 1, Array[i]); } } // Ievadot if (atk == 'y') { for (i = 0; i < N; i++) { // do { printf("Ievadiet %d. elementu : ", i + 1); scanf("%d", &Array[i]); if (Array[i] <= 0) { printf("Drikst ievadit tikai naturalus skaitlus!n"); } } while (Array[i] <= 0); } } b++; if (b == 1) { darray = (int*)calloc(b, sizeof(int)); } else darray = (int*)realloc(darray, b*sizeof(int)); // izmaina darray[b - 1] = Array[i]; printf("Dinamiskais masivs: "); for (d = 0; d <= b; d = d + 3) { printf("t%d ", darray[d - 1]); } printf("nAtkartosanai (y - Y). Iziet - jebkurs cits taustinsn"); scanf("%s", &ch); clrscr(); } while ((ch == 'y') || (ch == 'Y')); // atkartot programmu getch(); return 0; }
im пытается получить данные из базы данных и перечислить их в списке <li>
. im пытается узнать каждый третий элемент списка и дать ему отличный класс li? это мой код
<?php
while ($row = mysql_fetch_array($getupdates)){
?>
<li id="update" class="group">
blah blah blah
</li>
<?php } ?>
так что в основном для каждого третьего элемента я хочу дать ему другой класс li
<li id="update" class="group third">
29 янв. 2011, в 00:27
Поделиться
Источник
5 ответов
У вас есть счетчик в вашем цикле while. Позвольте называть его $i
. В своем цикле добавьте следующее:
$i++;
if ($i % 3 == 0) {
//do something you'd do for the third item
}
else { //default behavior }
Rafe Kettler
28 янв. 2011, в 22:00
Поделиться
Вы можете сделать это намного проще с помощью селекторов атрибутов псевдо-класса CSS3. Что-то вроде этого:
li:nth-child(3) {
font-weight: bold;
}
Если вы беспокоитесь об IE-поддержке атрибутов CSS3, вы можете легко добавить поддержку с помощью polyfill, например http://selectivizr.com/
Phil Powell
28 янв. 2011, в 22:06
Поделиться
Используйте счетчик, а затем просто проверьте, не является ли по модулю 3 счетчика 0 или нет, если это третья строка.
<?php
$rowCount = 0;
while ($row = mysql_fetch_array($getupdates))
{
$useDiffClass = (($rowCount++ % 3) == 0);
?>
<li id="update" class="group <?=($useDiffClass ? "third" : "");?>">
blah blah blah
<li>
<?
}
?>
Rich Adams
28 янв. 2011, в 20:51
Поделиться
Оператор модуля – это путь.
Но вы также можете использовать атрибуты CSS3 для достижения такого же эффекта без использования PHP.
takeshin
28 янв. 2011, в 21:06
Поделиться
<?php
$i = 0;
while (($row = mysql_fetch_array($getupdates)) !== false){
echo '<li id="update" class="group';
if ($i++ % 3 == 2) echo ' third';
echo '">blah blah blah</li>';
}
phihag
28 янв. 2011, в 20:40
Поделиться
Ещё вопросы
- 0Масштабирование фона SVG
- 1ByteArrayOutputStream для шортов вместо байтов
- 1текст Jlabel становится обрезанным при печати
- 0не удается установить Dlib на Windows 10
- 0Выберите количество с двумя условиями в одном псевдониме
- 1Чтение сжатого файла NumPy во время «с open () как f»
- 1Доступ к закрытому ключу после personal.newAccount в web3.py
- 1React Native подписанный apk завершается неудачно после обновления версии средства сборки gradle до 3.2.1
- 1Подсчитать количество экземпляров строки в очень большом массиве и добавить значение к значению хеша
- 0Источник данных combobox knockout-kendo не обновляется после его визуализации?
- 0Вопрос рисования мульти холста
- 0jQuery – ошибка перетаскиваемого элемента в стиле html + возврат в оригинальный контейнер
- 1Установка пустого значения для ввода текста
- 0Изменение фона HTML случайным образом при обновлении страницы
- 0Реализация BFS
- 0Как решить конфликт с package_find из CMake?
- 0Преобразовать этот запрос SQL в запрос mongodb –
- 1Неверно отформатированный десятичный код дает неверную ошибку
- 1Ударьте или пропустите морфологию в python, чтобы найти структуры в изображениях, не дает требуемых результатов
- 1Где разместить SwingUtilities.invokeLater в отдельном Java-приложении с поддержкой Spring?
- 0Доступ к методам и атрибутам объекта приводит к ошибке в JavaScript
- 1Почему Android и iOS не убивают процесс, когда приложение закрыто?
- 0не может скомпилировать opencv программы в ubuntu
- 0PHP strtolower с конкретным символом (например: äüö)
- 0после закрытия окна оповещения кнопка отправки не активируется
- 1Возможно ли, что getInstallerPackageName () имеет значение null, когда приложение загружено из Google Play Store?
- 1как создать делегата на целевой класс
- 0Получить текст из строки столбца
- 0если / еще для вызова функции, остальная логика идентична
- 1Parcelable обнаружил IOException при записи сериализуемого объекта во Fragment
- 1Как удалить элементы из отфильтрованных данных – Vue.js 2.x
- 0AngularJS AWS S3 sdk putObject не будет отправлять несколько объектов
- 0c # genereic sql context patameter
- 0Показать страницу просмотра с результатами группы из контроллера
- 1Прогнозирование отсутствия активности клиентов
- 0IE7 z-index не работает событие после добавления позиции?
- 1Установить ACL на функцию Lambda Python MediaConvert
- 0Mustache_Autoloader отсутствует с Composer
- 1каковы различия между различными способами создания экземпляра JAVA_HOME в Ubuntu
- 1Адреса пользовательских значений перечисления по порядку
- 0Mysql сервер ушел – во время mysqldump
- 1Regex для поиска всех функций JavaScript, включая обозначение стрелки?
- 1преобразование температуры Java в GUI
- 0`ngAnimate` – проблема интеграции
- 1Программа всегда входит в систему, даже если имя пользователя неверно
- 1поле ввода события Pygame
- 1Получение определенных элементов после чтения из файла
- 1Почему моя плавающая кнопка при запуске приложения переходит в верхнюю часть страницы?
- 0Плагин jQuery Validation – добавление класса ошибок к дополнительным элементам
- 0Перенаправление с .htaccess и его паролем защищены