我有一个包含如下对象的数组,
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] 删除。
我来说两句