Как сгруппировать объект на JavaScript?

173
02 июня 2018, 23:00

У меня есть массив:

[
    {"id":1, "name":"Melody 1", "artist":{"name": "Artist 1", "id":1}},
    {"id":2, "name":"Melody 2", "artist":{"name": "Artist 1", "id":1}}
]

Я хочу получить

[
    {"id":1, "name": "Artist 1", "content": [
        {"id":1, "name":"Melody 1"},
        {"id":2, "name":"Melody 2"}
    ]}
]

Перепробовал все варианты, которые удалось найти по js, но ничего не выходит. Подскажите, пожалуйста, каким образом я могу выполнять подобные операции?

Answer 1

console.log( 
 
    [ 
        {"id":1, "name":"Melody 1", "artist":{"name": "Artist 1", "id":1}}, 
        {"id":2, "name":"Melody 2", "artist":{"name": "Artist 1", "id":1}}, 
        {"id":3, "name":"Melody 3", "artist":{"name": "Artist 2", "id":2}}, 
    ] 
    .reduce( 
        (map, x) => { 
            if (!map.dict.hasOwnProperty(x.artist.id)) { 
                map.raw.push(map.dict[x.artist.id] = {...x.artist, content:[]}); 
            } 
            map.dict[x.artist.id].content.push({id: x.id, name: x.name}); 
            return map; 
        }, 
        {dict:{},raw:[]} 
    ) 
    .raw 
 
);

Напрашивается ещё проверка дубликатов по идентификатору мелодии, думаю сам разберёшься как её добавить.

READ ALSO
Как связать contenteditable блок с переменной (Vue)

Как связать contenteditable блок с переменной (Vue)

Как связать блок с contenteditable с переменной используя vue?

181
Вывод меню пути реализации на wordpress

Вывод меню пути реализации на wordpress

уважаемые коллеги,подскажите, пожалуйста как в wordpress реализовать меню как на сайте http://xn--80aidokfob8exn--p1ai/ Там где выбираешь iphone и нужная информация...

189
Зафиксировать столбцы таблицы

Зафиксировать столбцы таблицы

Вывожу из бд тиблицу, в таком формате

206
Как получить значение с api другого сайта?

Как получить значение с api другого сайта?

Как получить на своем сайте значение курса биткоина с этого сайта https://coinmarketcapcom/

204