首页 > 解决方案 > Javascript按数字和字母对字符串数组进行排序

问题描述

使用这个对象数组:

[
{a: "1M"},
{a: "10D"},
{a: "1D"},
{a: "6Y"},
{a: "3D"}
]

如何对该数组进行排序以获得此结果:

[
"1D",
"3D",
"10D",
"1M",
"6Y"
]

标签: javascriptstringsortingcompare

解决方案


您可以使用一个对象来获取给定单位的因子并按值排序。

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


推荐阅读