如果想要数据从这样
const data = [
{ category: 'A', value: 30 },
{ category: 'B', value: 25 },
{ category: 'A', value: 35 },
{ category: 'B', value: 20 }
];
变成这样
[
'A': [
{ category: 'A', value: 30 },
{ category: 'A', value: 35 },
],
'B': [
{ category: 'B', value: 20 },
{ category: 'B', value: 2 5 },
],
]
的方法有很多种,但是我觉得最快最高效的方法是以下这种:
// 使用 reduce 方法归类并排序
const groupedAndSorted = data.reduce((result, item) => {
if (!result[item.category]) {
result[item.category] = [];
}
result[item.category].push(item);
return result;
}, {});
// 对每个分类中的数组按照 value 属性排序
for (const category in groupedAndSorted) {
groupedAndSorted[category].sort((a, b) => a.value - b.value);
}
console.log("groupedAndSorted",groupedAndSorted);
当然如果想不要最外面那层直接就AB排序,并且以value作为第二个排序规则可以这么写
data.sort((a, b) => a.category - b.category); // 以category属性的ASCII码值降序排序
data.sort((a, b) => a.value - b.value); // 再以value属性值排序
就可以得到一下结果
[
{ category: 'A', value: 30 },
{ category: 'A', value: 35 },
{ category: 'B', value: 20 }
{ category: 'B', value: 25 },
];
当然还有一种方法
data.sort((a, b) => {
if (a.category === b.category) {
return a.value - b.value;
}
return a.category.localeCompare(b.category);
});
也同样可以得到满意的结果~