数组中有这样的字符串:
let arr = ["UserA | 3", "UserB | 0", "UserC | 2", "UserD | 1"]
名字和他们的ID在最后。我想在最后根据他们的id进行排序,但是没有办法做到。
您可以使用String#split
和Array#sort
,在此方案中定义自定义compareFunction
函数:
MDN Web Docs:
- 如果
compareFunction(a, b)
返回值>- 如果
compareFunction(a, b)
返回值<</li>- 如果
compareFunction(a, b)
返回0,则认为a和b相等。
:
let arr = ["UserA | 3", "UserB | 0", "UserC | 2", "UserD | 1", "UserE | 2020"];
arr.sort((a, b) => a.split(" | ")[1] - b.split(" | ")[1]);
console.log(arr);
您可以创建一个函数来提取最后一个数字id,使用RegExp结合String.prototype.match():
正则表达式:/d+(?=D*$)/
- d匹配一个数字(相当于[0-9])
- +在一次到无限次之间匹配前一个令牌,尽可能多地匹配,根据需要返回(贪婪)
- 正向预测(?=D*$)断言下面的正则表达式匹配D匹配非数字的任何字符(相当于[^0-9])
- *在0到无限次之间匹配前一个令牌,尽可能多地匹配,根据需要返回(贪婪)
- $在字符串末尾或在字符串末尾的行结束符之前(如果有的话)断言位置
最后使用Array.prototype.sort() 代码:
const arr = ["UserE | 2020", "UserA | 3", "UserB | 0", "UserC | 2", "UserD | 1"]
const getId = s => +s.match(/d+(?=D*$)/)[0]
arr.sort((a, b) => getId(a) - getId(b))
console.log(arr)