@yakov_l

Как поместить в конец массива элементы, удовлетворяющие определённому условию?

Есть массив объектов, если свойство status имеет значение "выполнено" - надо поместить такой элемент в конец массива.
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Как будем определять, надо ли отправить элемент в конец массива:

const checkItem = item => item.status === 'выполнено';

Изменяем существующий массив:

arr.sort((a, b) => +checkItem(a) || -checkItem(b));

// или

arr.reduceRight((_, n, i, a) => checkItem(n) && a.push(a.splice(i, 1)[0]), null);

// или

arr
  .reduce((acc, n, i) => (
    arr[i - acc.length] = n,
    checkItem(n) && acc.push(n),
    acc
  ), [])
  .forEach((n, i, a) => arr[arr.length - a.length + i] = n);

Создаём новый:

const newArr = arr
  .reduce((acc, n) => (
    acc[+checkItem(n)].push(n),
    acc
  ), [ [], [] ])
  .flat();

// или

const newArr = arr.reduce((acc, n) => (
  acc[checkItem(n) ? 'push' : 'unshift'](n),
  acc
), []);

// или

const newArr = [
  ...arr.filter(n => !checkItem(n)),
  ...arr.filter(checkItem),
];
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Комментировать
Ваш ответ на вопрос

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

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