还有其他关于如何在 JavaScript 中比较数组的问题?. 我想知道的是编写/使用像 Array.sort() 所需的三路比较函数的最直接方法。这是一个使用默认设置的示例,但效果不佳:
> [ [4,5,10], [4,5,6], [4,1,2] ].sort() // no compare function, uses the default one
[ [ 4, 1, 2 ],
[ 4, 5, 10 ], // oops, string sorting makes 10 < 6
[ 4, 5, 6 ] ]
这就是我想出的:
// return -1 if lhs is "less" than rhs, +1 if "greater", and 0 if equal
// if lhs and rhs have different lengths, only the shorter part will be considered
function compareArrays(lhs, rhs) {
for (var ii = 0; ii < lhs.length; ii++) {
if (lhs[ii] < rhs[ii]) {
return -1;
} else if (lhs[ii] > rhs[ii]) {
return 1;
}
}
return 0;
}
这给了我们想要的东西:
> [ [4,5,10], [4,5,6], [4,1,2] ].sort(compareArrays)
[ [ 4, 1, 2 ],
[ 4, 5, 6 ],
[ 4, 5, 10 ] ]
是否有更像单线的东西,或者我必须在任何时候定义自己的函数?
支持旧浏览器不是必需的。使用 jQuery 或 Underscore 之类的库是可以的。
看待这一点的一种方法是“应用于每对元素的标准三向比较中的第一个非零值”。但即便如此,我也没有在现有的库中找到合适的选择。