首页 > 解决方案 > 将对象数组转换为具有唯一 ID 和名称数组的另一个对象数组

问题描述

如何将此项目数组转换为结果数组(对象应具有唯一 id 并具有键“名称”,其中包含来自具有相同 id 的对象的名称属性数组):

原始数组:

const items = [
{id: 1, name: 'a'}, 
{id: 2, name: 'b'}, 
{id: 3, name: 'c'}, 
{id: 1, name: 'd'}, 
{id: 3, name: 'f'}
];

变换数组:

const result = [
{id: 1, names: ['a', 'd']}, 
{id: 2, names ['b']}, 
{id: 3, names: ['c', 'f']}
];

标签: javascriptarraysobject

解决方案


您可以使用Array.reduce来获得结果。

const inputArray = [
  {id: 1, name: 'a'}, 
  {id: 2, name: 'b'}, 
  {id: 3, name: 'c'}, 
  {id: 1, name: 'd'}, 
  {id: 3, name: 'f'}
];

const result = inputArray.reduce((acc, item) => {
   const exist = acc.find(e => e.id == item.id);
   // check exist in result
   if (exist) {
      // exist: push 'name' value to 'names' array
      exist['names'].push(item.name);
   } else {
      // not exist: create new item in result
      acc.push({
         'id': item.id,
         'names': [item.name]
      });
   }
   
   return acc;
}, []);

console.log(result);


推荐阅读