#javascript #ecmascript-6
#javascript #ecmascript-6
Вопрос:
Привет, у меня есть массив объектов, как показано ниже.
dataSource = [
{
NAME: "Jan",
VALUE: 5,
GRUP: "Grup 1"
},
{
NAME: "Feb",
VALUE: 15,
GRUP: "Grup 1"
},
{
NAME: "Mar",
VALUE: 3,
GRUP: "Grup 1"
}
]
Я хочу сопоставить это с ожидаемым результатом ниже
[
{
Base:"Grup 1",
Jan:5,
Feb:15,
Mar:3
}
]
Я пытался
let dataSource = [
{
NAME: "Jan",
VALUE: 5,
GRUP: "Grup 1"
},
{
NAME: "Feb",
VALUE: 15,
GRUP: "Grup 1"
},
{
NAME: "Mar",
VALUE: 3,
GRUP: "Grup 1"
}
]
console.log(GetObject(dataSource))
function GetObject(arr){
return arr.map(el=>
{
let obj={};
obj[el.NAME]=el.VALUE;
obj.BASE=el.GRUP
return obj
}
);
}
но это не дает ожидаемого результата. Это дает мне три массива объектов вместо нескольких атрибутов в одном объекте.
Как я могу сопоставить это?
Заранее спасибо
Ответ №1:
Сохраняйте группы в объекте:
const groups = {};
for (const data of dataSource) {
if (!(data.GRUP in groups)) {
groups[data.GRUP] = {Base: data.GRUP};
}
groups[data.GRUP][data.NAME] = data.VALUE;
}
const result = Object.values(groups);
console.log(result);