Javascript排序回调不适用于所有浏览器
我有以下代码:Javascript排序回调不适用于所有浏览器,javascript,sorting,Javascript,Sorting,我有以下代码: var r=[ [‘管道维修’、‘3布拉沃’、‘家庭面包师’], ['New connection'、'5 Delta'、'House Griffith'], [‘管道维修’、‘3布拉沃’、‘家庭面包师’], ]; r=r.sort(函数(a,b){ 返回(a[0]>b[0])?1:0; //编辑:我错误地复制了比我测试的原始代码更新的代码。但是答案仍然正确。 //原始代码(适用于Chrome,但不适用于Safari或my Rhino环境): //返回a[0]>b[0]; })
var r=[
[‘管道维修’、‘3布拉沃’、‘家庭面包师’],
['New connection'、'5 Delta'、'House Griffith'],
[‘管道维修’、‘3布拉沃’、‘家庭面包师’],
];
r=r.sort(函数(a,b){
返回(a[0]>b[0])?1:0;
//编辑:我错误地复制了比我测试的原始代码更新的代码。但是答案仍然正确。
//原始代码(适用于Chrome,但不适用于Safari或my Rhino环境):
//返回a[0]>b[0];
});
console.log(r)
传递给.sort()
的回调应该返回:
- -1,如果第一个参数应在第二个参数之前排序李>
- 0,如果参数具有相同的排序顺序李>
- 1,如果第二个参数应在第一个参数之前排序
.localeCompare()
(基本上我所知道的所有浏览器):
我看到的一个问题是比较函数 返回
0
意味着数组的两个条目具有相同的值。就像在数字数组中,当两个数字相同时
请参阅
用于排序字符串的引用:
items.sort(function(a, b) {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});
items.sort(函数(a,b){
var nameA=a.name.toUpperCase();//忽略大小写
var nameB=b.name.toUpperCase();//忽略大小写
if(nameA名称B){
返回1;
}
//名字必须相等
返回0;
});
您应该返回一个<0、0或>0的值,而不仅仅是1
或0
。而且可能旧版本的firefox也不这样做
-firefox从1开始就支持数组排序(fn)。0@deceze你比我快。返回0将足以获得适当的排序(尽管如果两个“键”相同,可能会产生不同的结果)(相同)
items.sort(function(a, b) {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});