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;
});