Сопоставление значения с ключом в объекте массива

#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);