Javascript 具有空值的localeCompare数组

Javascript 具有空值的localeCompare数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,在对数组排序时,控制台中出现以下错误: Uncaught TypeError: Cannot read property 'localeCompare' of null 到目前为止,我所尝试的: HTML: JavaScript/JQuery: 如何使用空值对数组进行排序 更新Fiddle以进行测试: 预期结果如下: 一键式显示: iOS 7、iOS 8.4、iOS 9、空、空、空 再次单击显示: iOS 9、iOS 8.4、iOS 7、空、空、空 不能在null上调用函数。数组中有一些空值。

在对数组排序时,控制台中出现以下错误:

Uncaught TypeError: Cannot read property 'localeCompare' of null
到目前为止,我所尝试的:

HTML:

JavaScript/JQuery:

如何使用空值对数组进行排序

更新Fiddle以进行测试:

预期结果如下:

一键式显示:

iOS 7、iOS 8.4、iOS 9、空、空、空

再次单击显示:

iOS 9、iOS 8.4、iOS 7、空、空、空


不能在null上调用函数。数组中有一些空值。因此,当您尝试对这些值进行排序时,它会崩溃

您可以保护您的代码以避免这种情况

TestArray.sort(function(a, b) {
    if (!a) {
       // Change this values if you want to put `null` values at the end of the array
       return -1;
    }

    if (!b) {
       // Change this values if you want to put `null` values at the end of the array
       return +1;
    }

    if (sorted)
        return a.localeCompare(b);
    else
        return b.localeCompare(a);
});
但是在我看来,你应该去掉数组中的空值。您可以过滤它们:

TestArray = TestArray.filter(function(val) {
    return val != null;
});
试试这个:

从clickable中删除orderDevicePlatformByASC类名。因为,它的初始外观没有排序。使用此选项进行排序

TestArray.sort(function (a, b) {
     if (clickedDevicePlatformSorting == 'orderDevicePlatformByASC' && a)            
        return  b ? a.localeCompare(b) : -1;
     else if (b) 
        return a ? b.localeCompare(a) : 1;
});
尝试三值运算符:

var TestArray=[ios7,null,ios8.4,null,null,null,ios9]; var=true; var fn=功能,b{ 如果分类 返回?a.localeCompareb:1; 返回b?b.localeComparea:-1; };
文件。书写;您希望空值去哪里?在列表上还是在列表下?为什么你甚至想要空值?“想移除它们吗?”克里斯·贝克特。排序后的输出结果是什么。@Sheralitudiyev检查我新更新的fiddle,它给了你更多的想法。我认为还需要一个else块,如果升序返回-1,如果降序返回1。否则,我觉得你的代码看起来不错。我如何首先显示iOS版本而不是空值?然后,当再次单击时,首先显示空值,然后显示iOS版本?请阅读我的代码中的注释。如果你想在数组的末尾加上null,就把-1和+1倒过来。!a和!b也适用于空字符串、0、未定义和NaN。但我不认为这是一件坏事,如果存在var sorted=false;结果应该是什么?这就是我想要的:,用新的JSFIDdle更新你的答案。请检查我的答案。删除首次出现的orderDevicePlatformByASC
TestArray.sort(function(a, b) {
    if (!a) {
       // Change this values if you want to put `null` values at the end of the array
       return -1;
    }

    if (!b) {
       // Change this values if you want to put `null` values at the end of the array
       return +1;
    }

    if (sorted)
        return a.localeCompare(b);
    else
        return b.localeCompare(a);
});
TestArray = TestArray.filter(function(val) {
    return val != null;
});
TestArray.sort(function (a, b) {
     if (clickedDevicePlatformSorting == 'orderDevicePlatformByASC' && a)            
        return  b ? a.localeCompare(b) : -1;
     else if (b) 
        return a ? b.localeCompare(a) : 1;
});