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

Как создать новый массив из объекта с сортировкой по индексу?

Есть объект, вида:

let obj = {
            'one': {
                color: 'red',
                position: 5
            },
            'two': {
                color: 'green',
                position: 3
            },
            'three': {
                color: 'grey',
                position: 8
            },
        }

Как на основе него можно создать массив, в котором значения цвета (из поля color) будут идти по возрастанию согласно поля position?
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию
    6 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Поскольку важны только значения, то сразу же выдёргиваем из объекта соответствующий массив, и о ключах забываем: const arr = Object.values(obj);. Дальше есть варианты:

Нормальный:

const result = arr.sort((a, b) => a.position - b.position).map(n => n.color);

Козлиный #1 (position должны быть целыми неотрицательными):

const result = arr
  .reduce((acc, n) => ((acc[n.position] = acc[n.position] ?? []).push(n.color), acc), [])
  .flat();

Козлиный #2 (position должны быть целыми, неотрицательными и уникальными):

const result = Object.values(Object.fromEntries(arr.map(n => [ n.position, n.color ])));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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