微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在TypeScript中重新排列数组

如何解决如何在TypeScript中重新排列数组

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

var users = [{
    id: 1,name: 'Swamy',category_id: 1,category_name: "Male"
  },{
    id: 2,name: 'Mahesh',{
    id: 3,name: 'Kajal',category_id: 2,category_name: "Female"
  },{
    id: 4,name: 'Rasi',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'
    }]
  },]

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

解决方法

首先,基于input,您可以使用category_idArray.reduce将输入分组。

然后从该groupedBy对象中,可以使用Array.map生成所需的结果。

var users = [{
    id: 1,name: 'Swamy',category_id: 1,category_name: "Male"
  },{
    id: 2,name: 'Mahesh',{
    id: 3,name: 'Kajal',category_id: 2,category_name: "Female"
  },{
    id: 4,name: 'Rasi',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);

,

您必须查找已排序数组中是否存在category_id。如果不是,则推送一个新条目。如果是,则将用户添加到该条目的用户中。

interface User {
    id: number;
    name: string;
};

interface Category {
    category_id: number;
    category_name: string;
}

interface Entry extends User,Category { }

interface SortedEntry extends Category {
    users: Array<User>;
}

var users: Array<Entry> = [
    {
        id: 1,category_name: "Male"
    },{
        id: 2,{
        id: 3,category_name: "Female"
    },{
        id: 4,category_name: "Female"
    }
];

const sorted: Array<SortedEntry> = [];

for (const { id,name,category_name,category_id } of users) {
    const match = sorted.find((entry) => entry.category_id === category_id);
    if (!match) {
        sorted.push({
            category_id,users: [
                {
                    id,}
            ]
        });
    }
    else {
        match.users.push({
            id,});
        const index = sorted.indexOf(match);
        sorted[index] = match;
    }
}

console.log(sorted);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。