我有以下代码:
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解释程序运行
如何在所有浏览器中实现相同的排序(我假设这将解决执行此脚本的平台上的问题)?
答案 0 :(得分:2)
您传递给| ORDERID | MATERIALNAME |
| 123 | SHEET1 |
| 123 | SHEET2 |
| 123 | EXT1 |
| 123 | MISC1 |
的回调应该返回:
您的回调基本上是对Safari中的排序机制给出错误的答案,因此排序过程会变得混乱。具体来说,当第二个键小于第一个键时,当键与和相同时,回调返回0.
为了比较字符串,您可以在现代浏览器中使用.sort()
(基本上我知道的所有浏览器):
.localeCompare()
答案 1 :(得分:1)
我看到的一个问题是你的比较功能。
返回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;
});