@dev123

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

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

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

Как на основе него можно создать массив, в котором значения цвета (из поля color) будут идти по возрастанию согласно поля position?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Поскольку важны только значения, то сразу же выдёргиваем из объекта соответствующий массив, и о ключах забываем: const arr = Object.values(obj);. Дальше есть варианты:

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

или

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

или (не годится, если значения position не являются уникальными)

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

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

Войти через центр авторизации
Похожие вопросы