我现在使用javascript
进行string
localeCompare
排序,我的数据也会包含多个null
值。
在比较localeCompare
和string
值时,我发现null
有一种奇怪的行为。将字符串值与a/A to n/N
的字符串值进行比较时,它可以正常工作,如下所示。
"n".localeCompare(null) // return -1;
"N".localeCompare(null) // return -1;
但如果我将空值与o/O to z/Z
进行比较,则返回1
"o".localeCompare(null) // return 1;
"O".localeCompare(null) // return 1;
我知道localeCompare
可以用来比较Unicode
,但为什么上述行为发生有什么原因?
答案 0 :(得分:3)
localeCompare
比较字符串,因此传递给它的任何内容都将转换为字符串,您将从
"n".localeCompare("null") // return -1;
"o".localeCompare("null") // return 1;
因为
localeCompare()方法返回数字,表示是否 引用字符串位于之前或之后,或者与给定字符串相同 按排序顺序排列。
表示
"null".localeCompare("null")
- >将返回0
,因为它是相同的字符串
"n".localeCompare("null")
- >将在-1
之前返回null
"o".localeCompare("null")
- >将在1
null
答案 1 :(得分:0)
null
值然后,你最好实现这样的事情,
function stringComparer(a,b) {
if(a && b)
return a.localeCompare(b);
else
// sort null and "" to bottom
if(a)
return -1;
else if(b)
return 1;
else
return 0;
}
并使用它来比较您的值。这是一个例子,
['Łove','Love',null,"",null,'kellogs','Kellogs','kellogs',null,"Lover"," ",'Man',"abc", "AAb", "Abc"].sort(stringComparer)
根据您希望null,“”和“”值如何相互排序,还有一些改进空间的空间。在上面的实现中,“”将排序到顶部,而null和“”值将排序到底部。