如何基于子字符串JS对字符串进行排序



数组中有这样的字符串:

let arr = ["UserA | 3", "UserB | 0", "UserC | 2", "UserD | 1"]

名字和他们的ID在最后。我想在最后根据他们的id进行排序,但是没有办法做到。

您可以使用String#splitArray#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)

相关内容

  • 没有找到相关文章