Реконструировать вложенный объект в Javascript - PullRequest
1 голос
/ 18 июня 2020

У меня есть такой объект в Javascript, и мне нужно восстановить его, как показано ниже:

  let data = {
            "10001": {
                'brand': 'jeep',
                'model': 'cherokee',
                'price': 27335,
            },
            '10002': {
                'brand': 'jeep',
                'model': 'compas',
                'price': 23775,
            },
            '32402': {
                'brand': 'dodge',
                'model': 'challenger',
                'price': 29590,
            }
        };

вот так:

let data_sorted = {
    "jeep": {
        10001: {
            'brand': 'jeep',
            'model': 'cherokee',
            'price': 27335,
        }, 10002: {
            'brand': 'jeep',
            'model': 'compas',
            'price': 23775,
        }
    },
    "dodge": {
        32402: {
            'brand': 'dodge',
            'model': 'challenger',
            'price': 29590,
        }
    }
};

Пробовал Object.assign, но он объединяет повторяющиеся ключи . Обратите внимание, торговая марка «джип» повторяется. Думаю, это можно сделать с помощью оператора распространения (...) три точки

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вам нужно немного, чтобы построить новые объекты для второго уровня.

let data = { 10001: { brand: 'jeep', model: 'cherokee', price: 27335 }, 10002: { brand: 'jeep', model: 'compas', price: 23775 }, 32402: { brand: 'dodge', model: 'challenger', price: 29590 } },
    result = Object
        .entries(data)
        .reduce(
            (r, [k, v]) => ({ ...r, [v.brand]: { ...(r[v.brand] || {}), [k]: v } }),
            {}
        );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 18 июня 2020

Создайте объект результата с брендами в качестве ключей и с новыми объектами в качестве значений. Затем выполните итерацию данных, чтобы заполнить эти новые объекты на основе бренда:

let data = {"10001": {'brand': 'jeep','model': 'cherokee','price': 27335,},'10002': {'brand': 'jeep','model': 'compas','price': 23775,},'32402': {'brand': 'dodge','model': 'challenger','price': 29590,}};

let result = Object.fromEntries(Object.values(data).map(({brand}) => [brand, {}]));
Object.entries(data).forEach(([key, val]) => result[val.brand][key] = val);

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...