27 sorting case-insensitive underscore.js
尝试使用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'}];
Run Code Online (Sandbox Code Playgroud)
使用此方法排序sortProperty ='name',结果在小写之前放置大写.
var sorted = _.sortBy(array, sortProperty);
1a2929 - abcdef
GGGGH - 123456
TEST - 4422
abc - Full description
test_1234 - zzaaa bb cc
zz1111 - ZAAbbbcc
Run Code Online (Sandbox Code Playgroud)
我认为这与区分大小写有关,但我无法弄清楚如何将数组中的名称更改为小写并进行比较.
任何帮助是极大的赞赏.
编辑:正如所指出的,你传入名称或函数,所以只需调整函数返回哪个字段进行排序:http: //jsfiddle.net/rjaqp1vg/5/
Chr*_*res 69
要排序的名称可以是字段名称或函数,因此传递一个执行小写转换的函数.
var sorted = _.sortBy(array, function (i) { return i.name.toLowerCase(); });
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.
Bra*_*gel 15
不要使用_.sortBy.按字母顺序排序字符串的正确方法是使用localeCompare.这是纯Javascript中的一个例子:
['Z', 'A','z','á', 'V'].sort(function(a, b){
return a.localeCompare(b, undefined /* Ignore language */, { sensitivity: 'base' })
});
Run Code Online (Sandbox Code Playgroud)