有一些轻微的问题,试图让underscore.js做不区分大小写的排序。我有一个对象数组,希望能够按属性名称进行排序。
使用快捷方法sortBy
迭代器也可以是要按其排序的属性的字符串名称(例如。长度)。
待排序的数组:
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/
发布于 2014-09-16 08:21:54
要排序的名称可以是字段名或函数,因此传递一个执行小写转换的函数。
var sorted = _.sortBy(array, function (i) { return i.name.toLowerCase(); });
应该能起作用。
发布于 2015-04-23 09:14:13
不要为此使用_.sortBy。按字母顺序排序字符串的正确方法是使用localeCompare。以下是纯Javascript中的一个示例:
['Z', 'A','z','á', 'V'].sort(function(a, b){
return a.localeCompare(b, undefined /* Ignore language */, { sensitivity: 'base' })
});
发布于 2020-05-25 05:04:55
Chris的回答对我很有用,我用箭头函数使它更短了一点:
var sorted = _.sortBy(array, (i) => i.name.toLowerCase());
https://stackoverflow.com/questions/25873635
复制