lodash orderby 按字母顺序排列,字符串中包含数字

A D*_*yer 1 lodash

我想订购以下数组:

  • 名称:2014年秋季Grth 10
  • 名称: 2014年秋季Grth 4
  • 名称:2014年秋季Grth 5
  • 名称:2014秋季伦理平衡
  • 名称:2014年秋季Grth 6
  • 名称:2014年秋季7
  • 名称:2014年夏季7
  • 名称:2014年秋季9

如果我执行以下操作:

_.orderBy(list, function (e) { return e.name, ['desc'] })
Run Code Online (Sandbox Code Playgroud)

它将返回:

  • 2014 秋季伦理平衡
  • 2014年秋季Grth 10
  • 2014 秋季 GRTH 4
  • 2014年秋季Grth 5
  • 2014年秋季Grth 6
  • 2014年秋季7
  • 2014年秋季9
  • 2014 夏季 GRTH 7

如您所见,它按字母顺序正确排列列表,但不考虑字符串末尾的数字。

非常感谢您的帮助:)

Has*_*mam 5

您可以localeCompare通过将numeric选项指定为 来对数组进行排序true

var data = [{name: '2014 Autumn Grth 10'},{name: '2014 Autumn Grth 4'},{name: '2014 Autumn Grth 5'},{name: '2014 Autumn Ethical Balanced'},{name: '2014 Autumn Grth 6'},{name: '2014 Autumn Grth 7'},{name: '2014 Summer Grth 7'},{name: '2014 Autumn Grth 9'}];
var result = data.slice().sort((a,b) => a.name.localeCompare(b.name, undefined, {numeric: true}));
console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

  • 使用原生排序是有意义的,但 PO 正在询问 lodash 解决方案 (2认同)