javascript `localeCompare` return 不同的值
javascript `localeCompare` return different values
我现在正在使用 localeCompare
javascript
string
排序,我的数据也将包含几个 null
值。
我在比较 string
和 null
值时发现 localeCompare
有一个奇怪的行为。将字符串值与 startswith a/A to n/N
进行比较时,它工作正常,如下所示。
"n".localeCompare(null) // return -1;
"N".localeCompare(null) // return -1;
但是如果我将空值与 o/O to z/Z
进行比较之后 returns 1
"o".localeCompare(null) // return 1;
"O".localeCompare(null) // return 1;
我知道 localeCompare
与比较 Unicode
一起工作,但为什么会出现上述行为,有什么原因吗?
localeCompare
比较字符串,因此传递给它的任何内容都将转换为字符串,您将从
得到相同的结果
"n".localeCompare("null") // return -1;
"o".localeCompare("null") // return 1;
因为
The localeCompare() method returns a number indicating whether a
reference string comes before or after or is the same as the given
string in sort order.
这意味着
"null".localeCompare("null")
-> 将 return 0
因为它是同一个字符串
"n".localeCompare("null")
-> 将 return -1
和 null
之前一样
"o".localeCompare("null")
-> 将 return 1
出现在 null
之后
如果您想要一个可以处理 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 和 "" 值将排序到底部。
我现在正在使用 localeCompare
javascript
string
排序,我的数据也将包含几个 null
值。
我在比较 string
和 null
值时发现 localeCompare
有一个奇怪的行为。将字符串值与 startswith a/A to n/N
进行比较时,它工作正常,如下所示。
"n".localeCompare(null) // return -1;
"N".localeCompare(null) // return -1;
但是如果我将空值与 o/O to z/Z
进行比较之后 returns 1
"o".localeCompare(null) // return 1;
"O".localeCompare(null) // return 1;
我知道 localeCompare
与比较 Unicode
一起工作,但为什么会出现上述行为,有什么原因吗?
localeCompare
比较字符串,因此传递给它的任何内容都将转换为字符串,您将从
"n".localeCompare("null") // return -1;
"o".localeCompare("null") // return 1;
因为
The localeCompare() method returns a number indicating whether a reference string comes before or after or is the same as the given string in sort order.
这意味着
"null".localeCompare("null")
-> 将 return 0
因为它是同一个字符串
"n".localeCompare("null")
-> 将 return -1
和 null
之前一样
"o".localeCompare("null")
-> 将 return 1
出现在 null
如果您想要一个可以处理 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 和 "" 值将排序到底部。