如何把一个数组归类排序

如果想要数据从这样

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);
});

也同样可以得到满意的结果~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值