Преобразование массива значений ключей с повторяющимися ключами в массив объектов с уникальным ключом и свойством массива значений

У меня есть массив пар ключ / значение. Ключи иногда дублируются, а значения всегда уникальны для каждого ключа. Я хочу сжать каждый уникальный ключ до объекта, чтобы у меня был ключ и массив связанных значений в качестве свойства. Есть ли для этого какие-нибудь удобные функции javascript?

Этот

pairArray = [
{ key: "a", value: "1" },
{ key: "a", value: "2" },
{ key: "b", value: "1" },
{ key: "b", value: "2" },
];

Становится

objectArray = [
{ key: "a", values: ["1", "2"] },
{ key: "(", values: ["1", "2"] }
];

person danielr    schedule 09.01.2019    source источник
comment
Итак, что вы пробовали?   -  person Just code    schedule 09.01.2019
comment
Отредактируйте свой вопрос и покажите нам, что вы пробовали.   -  person Just code    schedule 09.01.2019


Ответы (1)


Вы можете просто создать карту, используя Array.reduce() с вашим свойством key вашего объекта в качестве ключа вашей карты, Object.values() на этой карте даст вам желаемый результат:

Assuming you have a typo in your expected output. You can try the following :

const pairArray =  [ { key: "a", value: "1" }, { key: "a", value: "2" }, { key: "b", value: "1" }, { key: "b", value: "2" }, ];

const result = Object.values(pairArray.reduce((acc, {key, value})=>{
  acc[key] = acc[key] || {key, values : []};
  acc[key].values.push(value);
  return acc;
},{}));

console.log(result);

person amrender singh    schedule 09.01.2019
comment
Мой ответ удалил, потому что он идентичен вашему ответу .. Хотя он не копировался;) - person Yosvel Quintero Arguelles; 09.01.2019