Как найти каждый третий элемент массива

Мы хотим получить из массива каждый третий элемент. Как это сделать?

У нас есть массив:

let massiv = [1,2,3,4,5,6,7,8,9,10];

Мы взяли массив из чисел для простоты восприятия, чтобы результат был более наглядным.

Использование метода filter()

Из документации мы знаем, что метод filter() может принимать ДВА параметра. Первый обязательный — это функция обратного вызова, выполнение которой должно приводить к получению логического значения true или false. Её нам будет достаточно.

Эта функция обратного вызова может принимать ТРИ параметра:

  1. значение элемента
  2. индекс элемента
  3. просматриваемый (обходимый) объект

Для решения задачи нам будет достаточно передать первые два параметра. Если быть точнее, то нам нужен только второй параметр, но к сожалению, мы не можем передать только его одного. Индексы любого «нормального» массива начинаются с 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]

Получили каждый третий элемент массива JavaScript

Получили каждый третий элемент массива JavaScript

Как это работает?

Первый вызов коллбэка

Давайте по шагам посмотрим на преобразования. Сначала в коллбэк придёт индекс под номером НОЛЬ.

Первыми выполнятся действия с самых глубоких скобках:

(index+1)

Это выражение вернёт нам 1. Затем выполнится получение остатка от деления:

(0+1)%3 или 1%3

Остаток от деления на три - JavaScript

Остаток от деления на три — JavaScript

После этого будет выполнен оператор отрицания, который вернёт нам значение false.

Отрицание единицы возвращает false - JavaScript

Отрицание единицы возвращает false — JavaScript

В результате в новый массив не попадёт первый элемент.

Второй вызов коллбэка

Во второй раз выражение (index+1) будет эквивалентно 1+1, что в итоге вернёт 2. Затем выполнится получение остатка от деления:

(1+1)%3 или 2%3

Остаток от деления на три, числа 2 - JavaScript

Остаток от деления на три, числа 2 — JavaScript

После этого будет выполнен оператор отрицания, который вернёт нам значение false.

Отрицание двойки даёт false - JavaScript

Отрицание двойки даёт false — JavaScript

В результате в новый массив не попадёт второй элемент.

Третий вызов коллбэка — Успешный

В третий раз выражение (index+1) будет эквивалентно 2+1, что в итоге вернёт 3. Затем выполнится получение остатка от деления:

(2+1)%3 или 3%3

Остаток от деления на 3 числа 3 - JavaScript

Остаток от деления на 3 числа 3 — JavaScript

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

Отрицание нуля возвращает true - JavaScript

Отрицание нуля возвращает true — JavaScript

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

Информационные ссылки

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 и его паролем защищены

Сообщество Overcoder

Добавить комментарий