Javascript排序回调不能在所有浏览器上工作
Javascript sort callback not working on all browsers
我有以下代码:
var r = [
['Pipe repair', '3 Bravo', 'Household Baker'],
['New connection', '5 Delta', 'Household Griffith'],
['Pipe repair', '3 Bravo', 'Household Baker'],
];
r = r.sort(function(a, b) {
return (a[0] > b[0]) ? 1: 0;
// EDIT: I mistakingly copied newer code than the original code I was testing. However the answer was still on point.
// The original code (that worked in Chrome but not Safari or my Rhino environment):
// return a[0] > b[0];
});
console.log(r)
Google Chrome生成排序输出,node.js也是如此。但是Safari没有(可能老版本的firefox也没有)。这个脚本是由Android应用程序中的Rhino解释器运行的
我如何在所有浏览器中实现相同的排序(我假设这将解决该脚本正在执行的平台上的问题)?
传递给.sort()
的回调应该返回:
- -1,如果第一个参数应该在第二个参数之前排序;
- 0,如果参数的排序顺序相同;
- 1,如果第二个参数应该排在第一个参数之前。
你的回调对Safari中的排序机制给出了错误的答案,所以排序过程变得混乱。具体来说,当键相同和时,当第二个键小于第一个键时,回调返回0。
对于比较字符串,您可以在现代浏览器中使用.localeCompare()
(基本上我知道的所有浏览器):
r = r.sort(function(a, b) {
return a[0].localeCompare(b[0]);
});
我发现一个问题是你的比较功能。
返回0
表示数组的两个表项具有相同的值。就像在数字数组中,两个数字是相同的。
参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
对字符串进行排序:
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;
});
相关文章:
- 如何使用modalDialog来显示可以在所有浏览器中工作的弹出窗口
- Javascript的某些部分在Chrome中不起作用,但在其他浏览器中可以完美工作
- 如何隐藏空<span>在IE中使用javascript.(注意,在其他浏览器中工作正常)
- Javascript字母选择没有'我不能在谷歌浏览器上工作
- 我如何使HTML5<输入类型=月份>以在所有浏览器上工作
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- 使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器
- Json到CSV下载,可以在chrome中工作,但不能在IE浏览器中工作
- 有没有人能够得到这个要求或调试NPM模块在浏览器中工作
- 是否可以在浏览器中创建类似谷歌浏览器工作区的东西
- JAX-RS Web Service 通过浏览器工作,但不通过 XMLHTTPRequest
- 如何使旋转图像与javascript跨浏览器工作
- jQuery:如何使css('line-height')跨浏览器工作
- 填写用户名和密码后,当我按下一个回车键无法登录ie,但谷歌浏览器工作正常.如何来
- 未捕获的语法错误与jquery插件和chrome,在其他浏览器工作正常
- Javascript函数不能跨浏览器工作
- 如何将all()函数转换为跨浏览器工作
- indexOf在IE8抛出错误,但在所有其他浏览器工作
- 缓存破坏不与android浏览器工作
- JS播放器——错误:我的返回错误不与IE10工作,但与所有其他浏览器工作