我有这个数组
const array = ['item-30', 'part-12', 'list-41'];
我需要的是根据每个元素的后缀从最小到最大排序
示例:
- 第12部分
- 第30项
- 列表41
从上面的列表中可以看到,数组中的元素根据字符串的后缀(即-12、-30、-40(按顺序显示
此外,我需要元素有序。但是字符串中没有前缀
示例:
- 部分
- 项目
- 列表
所以现在数组是有序的,减去(-后缀(。
我尝试了以下方法:
const array = ['item-30', 'part-12', 'list-41'];
console.log(array.sort((a, b) => a < b ? 1 : 1));
我真的希望这是有道理的D
sort
、map
、split
用于解决此问题。
const fruits = ['item-30', 'part-12', 'list-41'];
var result = fruits.sort((a, b) => Number(a.split("-")[1]) - Number(b.split("-")[1])).map(a => a.split("-")[0])
console.log(result)
当sort()
为数字时,回调只是a - b
。为了得到这些数字,我们将.slice(-2)
每个字符串的最后两个字符,然后通过在它们前面加一个+
:将该字符串强制转换为一个数字
.sort((a, b) => +a.slice(-2) - +b.slice(-2))
接下来,.map()
每个字符串和在每个迭代.replace()
上的文字:-
和";一个或多个数字">:当前字符串上没有的d+
:''
:
.map(x => x.replace(/-d+/, ''));
let array = ['item-30', 'part-12', 'list-41'];
let output = array
.sort((a, b) => +a.slice(-2) - +b.slice(-2))
.map(x => x.replace(/-d+/, ''));
console.log(output);