我有一个对象数组,每个对象都有一个属性name,一个字符串.我想通过这个属性对数组进行排序.我希望他们按以下方式排序..
`ABC`
`abc`
`BAC`
`bac`
etc...
Run Code Online (Sandbox Code Playgroud)
我如何在JavaScript中实现这一目标?
Mar*_*sen 47
有两种基本方法:
var arr = [{name:"ABC"},{name:"BAC"},{name:"abc"},{name:"bac"}];
arr.sort(function(a,b){
var alc = a.name.toLowerCase(), blc = b.name.toLowerCase();
return alc > blc ? 1 : alc < blc ? -1 : 0;
});
Run Code Online (Sandbox Code Playgroud)
要么
arr.sort(function(a,b){
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
});
Run Code Online (Sandbox Code Playgroud)
请注意,第二个版本忽略变音符号,所以a和à将被分类为相同的字母.
现在这两种方式的问题在于它们不会ABC在小写之前排序大写abc,因为它会将它们视为相同.
要解决这个问题,你必须这样做:
arr.sort(function(a,b){
var alc = a.name.toLowerCase(), blc = b.name.toLowerCase();
return alc > blc ? 1 : alc < blc ? -1 : a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
});
Run Code Online (Sandbox Code Playgroud)
localeCompare如果您不希望变音符号影响排序,您可以选择使用此代码:
arr.sort(function(a,b){
var lccomp = a.name.toLowerCase().localeCompare(b.name.toLowerCase());
return lccomp ? lccomp : a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
});
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关排序的更多信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort
| 归档时间: |
|
| 查看次数: |
11714 次 |
| 最近记录: |