对数组中的字符串进行排序

时间:2018-11-22 17:09:02

标签: javascript arrays ecmascript-6

我具有以下年龄段:

["35 - 44", "18 - 34", "55+", "45 - 54"]

我想对它进行排序,以便:

["18 - 34", "35 - 44", "45 - 54", "55+"]

到目前为止,我有:

arr.map(item => parseInt(item, 10)).sort((a, b) => a - b)

哪个给我:

[18, 25, 35, 65]

但是我不知道现在该怎么办。

感谢帮助。

1 个答案:

答案 0 :(得分:3)

请勿通过map parseInt,否则将删除字符串开头之后的非数字。只需使用localeCompare对普通字符串数组进行排序:

console.log(
  ["35 - 44", "18 - 34", "55+", "45 - 54"].sort((a, b) => a.localeCompare(b))
);

要更加灵活一点,如果也存在个位数的范围,请同时使用numeric: true选项:

console.log(
  ["35 - 44", "1-2", "3-4", "18 - 34", "55+", "45 - 54"]
    .sort((a, b) => a.localeCompare(b, undefined, {numeric: true}))
);