javascript - Javascript按数字和字母对字符串数组进行排序
问题描述
使用这个对象数组:
[
{a: "1M"},
{a: "10D"},
{a: "1D"},
{a: "6Y"},
{a: "3D"}
]
如何对该数组进行排序以获得此结果:
[
"1D",
"3D",
"10D",
"1M",
"6Y"
]
解决方案
您可以使用一个对象来获取给定单位的因子并按值排序。
const
getValue = s => ({ D: 1, M: 30, Y: 365 })[s.slice(-1)] * s.slice(0, -1),
array = [{ a: "1M" }, { a: "10D" }, { a: "1D" }, { a: "6Y" }, { a: "3D" }],
result = array
.map(({ a }) => a)
.sort((a, b) => getValue(a) - getValue(b));
console.log(result);
按字母排序
const
array = [{ a: "1M" }, { a: "10D" }, { a: "1D" }, { a: "6Y" }, { a: "3D" }],
result = array
.map(({ a }) => a)
.sort((a, b) =>
a.slice(-1).localeCompare(b.slice(-1)) ||
a.slice(0, -1) - b.slice(0, -1)
);
console.log(result);
推荐阅读
- spring-boot - Sping:@EnableHypermediaSupport 给出错误“没有在类 ConverterRegisteringWebMvcConfigurer 中定义的具有 0 个参数的构造函数”
- ios - 快速检查类是否符合协议始终为真
- postgresql - pglogical:删除前的 REPLICA TRIGGER 导致数据库损坏
- java - 如何使画布适合所有屏幕尺寸?
- mysql - Laravel 迁移正在运行,但无法使用 Eloquent 访问
- android - Recyclerview 未更新 searchview 文本更改
- android - 使用 react-native-swiper 时,OnScroll 不会在 android 上发送任何事件
- sql-server-2008 - 使用 cte 中的 rank() 函数删除重复记录
- sql - 有没有办法获取每个月的月底日期
- sql-server - How to check if a query returns a null value and add it to a label text?