首页 > 解决方案 > 如何在 TypeScript 中重新排列数组

问题描述

我有一个包含如下对象的数组,

var users = [{
    id: 1,
    name: 'Swamy',
    category_id: 1,
    category_name: "Male"
  },
  {
    id: 2,
    name: 'Mahesh',
    category_id: 1,
    category_name: "Male"
  },
  {
    id: 3,
    name: 'Kajal',
    category_id: 2,
    category_name: "Female"
  },
  {
    id: 4,
    name: 'Rasi',
    category_id: 2,
    category_name: "Female"
  }
]

我想根据类别重新安排以上内容

var cat_users = [{
    category_id: 1,
    category_name: "Male",
    users: [{
      id: 1,
      name: 'Swamy'
    }, {
      id: 2,
      name: 'Mahesh'
    }]
  },
  {
    category_id: 2,
    category_name: "Female",
    users: [{
      id: 3,
      name: 'Kajal'
    }, {
      id: 4,
      name: 'Rasi'
    }]
  },
]

我正在寻找解决方案,但似乎找不到任何相关的东西。请帮助重新排列阵列。

标签: javascriptarraystypescriptjavascript-objects

解决方案


首先,基于,您可以使用input对该输入进行分组。category_idArray.reduce

从该groupedBy对象,您可以使用Array.map.

var users = [{
    id: 1,
    name: 'Swamy',
    category_id: 1,
    category_name: "Male"
  },
  {
    id: 2,
    name: 'Mahesh',
    category_id: 1,
    category_name: "Male"
  },
  {
    id: 3,
    name: 'Kajal',
    category_id: 2,
    category_name: "Female"
  },
  {
    id: 4,
    name: 'Rasi',
    category_id: 2,
    category_name: "Female"
  }
];

const groupBy = users.reduce((acc, cur) => {
  acc[cur.category_id] ? acc[cur.category_id].users.push({
    id: cur.id,
    name: cur.name
  }) : acc[cur.category_id] = {
    category_id: cur.category_id,
    category_name: cur.category_name,
    users: [{
      id: cur.id,
      name: cur.name
    }]
  };
  return acc;
}, {});

const result = Object.entries(groupBy).map(([ category_id, rest ]) => ({
  category_id,
  ...rest
}));
console.log(result);


推荐阅读