【问题标题】:Underscore.js Case Insensitive SortingUnderscore.js 不区分大小写的排序
【发布时间】:2014-11-10 11:45:46
【问题描述】:

尝试让 underscore.js 进行不区分大小写的排序时遇到一些小问题。我有一个对象数组,希望能够按属性名称排序。

使用快捷方式sortBy

iteratee 也可以是要排序的属性的字符串名称(例如长度)。

要排序的数组:

var array = [{ name: 'test_1234', description: 'zzaaa bb cc'}, 
         { name: 'zz1111', description: 'ZAAbbbcc'}, 
         { name: 'TEST', description: '4422'}, 
         { name: '1a2929', description: 'abcdef'}, 
         { name: 'abc', description: 'Full description'}, 
         { name: 'GGGGH', description: '123456'}];

使用这种方法排序,sortProperty = 'name',结果大写在小写之前。

var sorted = _.sortBy(array, sortProperty);

1a2929 - abcdef
GGGGH - 123456
TEST - 4422
abc - Full description
test_1234 - zzaaa bb cc
zz1111 - ZAAbbbcc

我认为这与区分大小写有关,但我不知道如何将数组中的名称更改为小写并以这种方式进行比较。

非常感谢任何帮助。

编辑: 正如所指出的,您传入名称或函数,因此只需调整函数以返回要排序的字段: http://jsfiddle.net/rjaqp1vg/5/

【问题讨论】:

    标签: sorting underscore.js case-insensitive


    【解决方案1】:

    排序依据的名称可以是字段名称或函数,因此请传递一个进行小写转换的函数。

    var sorted = _.sortBy(array, function (i) { return i.name.toLowerCase(); });
    

    应该可以解决问题。

    【讨论】:

    • 我想了很多,谢谢。我只需要包括要排序的属性,即。返回 i.name.toLowerCase() 或返回 i.description.toLowerCase()
    • 如果您也需要 _.uniq() 忽略大小写,这非常有用。
    • 供将来参考:Rejected Edit 提出了另一种解决方案 - var sorted = _.sortBy(array, (i) => i.name.toLowerCase());此编辑旨在解决帖子的作者,作为编辑毫无意义。它应该写成评论或答案。
    【解决方案2】:

    不要为此使用 _.sortBy。按字母顺序对字符串进行排序的正确方法是使用 localeCompare。这是一个纯 Javascript 的示例:

    ['Z', 'A','z','á', 'V'].sort(function(a, b){
       return a.localeCompare(b, undefined /* Ignore language */, { sensitivity: 'base' }) 
    });
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

    【讨论】:

    【解决方案3】:

    克里斯的回答对我来说效果很好,我用箭头函数把它缩短了一点:

    var sorted = _.sortBy(array, (i) => i.name.toLowerCase());
    

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2020-09-13
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多