javascript排序混合字符串和空值的数组

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)


rob*_*ert 8

[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)