Mar*_*aio 11 javascript arrays sorting
当soritng由混合字符串,空值和零组成的数组时,我得到的结果不能正确检测,null值似乎被排序为好像它们是'null'字符串.我这样做了(在FireFox上测试过):
var arr1 = arr2 = [null, "b", "c", "d", null, "e", 0, "g", null, 0, "h", "i", "l", "m", "n", "o", "p", "ne", "nur", "nimbus"];
document.write("SORTED ARRAY:<br>");
arr1.sort();
arr1.forEach(function(val){document.write(val + "; ")});
Run Code Online (Sandbox Code Playgroud)
结果是:
SORTED ARRAY:0; 0; b; C; d; Ë; G; H; 一世; 升; 米; N; NE; 雨云; 空值; 空值; 空值; 努尔; O; 磷;
您是否知道如何在排序数组期间将空值视为空字符串,以便它们在排序的arry中与零一起显示为1st.
谢谢!
Tim*_*own 14
这将通过将所有内容转换为字符串(特别是将null转换为空字符串)并允许JavaScript的内置字符串比较来完成您的工作:
arr2.sort( function(a, b)
{
/*
We avoid reuse of arguments variables in a sort
comparison function because of a bug in IE <= 8.
See http://www.zachleat.com/web/array-sort/
*/
var va = (a === null) ? "" : "" + a,
vb = (b === null) ? "" : "" + b;
return va > vb ? 1 : ( va === vb ? 0 : -1 );
} );
Run Code Online (Sandbox Code Playgroud)
[null, "b", "c", "d", null, "e", 0, "g", null, 0, "h", "i", "l", "m", "n", "o", "p", "ne", "nur", "nimbus"].sort(function (a,b) {
return a === null ? -1 : b === null ? 1 : a.toString().localeCompare(b);
});
Run Code Online (Sandbox Code Playgroud)