lodash orderby字母顺序与字符串中的数字

时间:2018-01-27 09:16:58

标签: lodash

我想订购以下数组:

  • 名称:2014秋季Grth 10
  • 名称:2014秋季Grth 4
  • 名称:2014年秋季5号
  • 名称:2014年秋季道德平衡
  • 名称:2014年秋季第6期
  • 名称:2014年秋季7号
  • name:2014 Summer Grth 7
  • 姓名:2014秋季Grth 9

如果我执行以下操作:

_.orderBy(list, function (e) { return e.name, ['desc'] })

它将返回:

  • 2014年秋季道德平衡
  • 2014秋季Grth 10
  • 2014秋季Grth 4
  • 2014秋季Grth 5
  • 2014秋季第6期
  • 2014年秋季第7期
  • 2014秋季Grth 9
  • 2014 Summer Grth 7

正如您所看到的那样,它可以按字母顺序对列表进行正确排序,但不会考虑字符串末尾的数字。

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

您可以使用localeComparenumeric选项指定为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);

.as-console-wrapper { max-height: 100% !important; top: 0; }