Задать вопрос
@VtzzzZZ

Как реализовать выборку нужных элементов с помещением их во вновь создаваемые массивы?

Есть массив неких элементов и пустой массив
let result = [] ;
let arr = [el1,el2,el3...,eln]


Каждый из элементов проверяется на соответсвие какому-то условию
Когда впервые попадается элемент который этому условию соответствует , то создается массив .
В этот массив добавляется элемент , проверка идет дальше .

Если следующий элемент соответствует условию , то он добавляется в тот же массив
Если следующий элемент не соответствует условию , то массив 'закрывается' - в него не будет ничего добавляться

Проверка идет дальше . Вновь нашли нужный элемент ? Опять создали массив и т.д
Т.е результат будет представлять собой примерно такую выборку массивов :

[[el2,el3],[el5]...[eln,...,eln+m]]
Вроде не сложно , а сообразить не могу , ступор . Помогите , спасибо !
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Надо запоминать индекс последнего подходящего элемента, если равен текущему минус один - помещаем текущий элемент в последнюю группу, нет - создаём новую:

const filterAndGroupAdjacent = (data, filterFn) =>
  Array.prototype.reduce.call(
    data,
    (acc, n, i, a) => {
      if (filterFn(n, i, a)) {
        const len = acc[0].length;
        (acc[1] === ~-i ? acc[0][~-len] : (acc[0][len] = [])).push(n);
        acc[1] = i;
      }

      return acc;
    },
    [ [], null ]
  )[0];

Примеры использования:

// достаём нечётные числа
filterAndGroupAdjacent(
  [ 1, 7, 3, 2, 3, 4, 4, 9, 5 ],
  n => n & 1
) // [ [1,7,3], [3], [9,5] ]

// буквы в верхнем регистре
filterAndGroupAdjacent(
  '1_Df+HNU*@qpJM!x',
  RegExp.prototype.test.bind(/[A-Z]/)
) // [ ["D"], ["H","N","U"], ["J","M"] ]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы