如何在 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'
    }]
  },
]

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

约翰·迈克尔征服者

您必须查找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,
        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 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,
            category_name,
            users: [
                {
                    id,
                    name,
                }
            ]
        });
    }
    else {
        match.users.push({
            id,
            name,
        });
        const index = sorted.indexOf(match);
        sorted[index] = match;
    }
}

console.log(sorted);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章