在JavaScript中对字符串类型列进行排序
我想知道如何对具有数字或“x”值(未定义)的列进行排序。对于传统排序,结果不正确,17比7来得早 例如:在JavaScript中对字符串类型列进行排序,javascript,Javascript,我想知道如何对具有数字或“x”值(未定义)的列进行排序。对于传统排序,结果不正确,17比7来得早 例如: 17 7 9 X 要将其排序为: 7 9 17 X PS. 我正在使用: var data = new google.visualization.DataTable() data.addRow[{v:'17'}, {v:'7'}, {v:'9'}, {v:'X'}] 我希望能够在事件侦听器中对其进行排序。您可以通过检查'X'进行排序,并将此值
17
7
9
X
要将其排序为:
7
9
17
X
PS.我正在使用:
var data = new google.visualization.DataTable()
data.addRow[{v:'17'}, {v:'7'}, {v:'9'}, {v:'X'}]
我希望能够在事件侦听器中对其进行排序。您可以通过检查
'X'
进行排序,并将此值移动到数组的末尾
通过不带回调的获取,所有项都被排序为字符串
分拣分两部分进行
NaN
并获取布尔结果的增量,这意味着
value value isNaN isNaN
a b a b delta meaning
------ ------ ----- ----- ----- -------
NaN NaN true true 0 a === b
NaN number true false 1 a > b
number NaN false true -1 a < b
number number false false 0 a === b
您可以通过检查
'X'
进行排序,并将此值移动到数组的末尾
通过不带回调的获取,所有项都被排序为字符串
分拣分两部分进行
NaN
并获取布尔结果的增量,这意味着
value value isNaN isNaN
a b a b delta meaning
------ ------ ----- ----- ----- -------
NaN NaN true true 0 a === b
NaN number true false 1 a > b
number NaN false true -1 a < b
number number false false 0 a === b
您可以将
localeCompare
与比较器函数中的{numeric:true}
选项一起使用:
让arr=[“17”、“7”、“9”、“X”];
函数比较器(a,b){
返回a.localeCompare(b,“en”,{numeric:true});
}
console.log(
arr.sort(比较器)
)
您可以在比较器函数中使用localeCompare
和{numeric:true}
选项:
让arr=[“17”、“7”、“9”、“X”];
函数比较器(a,b){
返回a.localeCompare(b,“en”,{numeric:true});
}
console.log(
arr.sort(比较器)
)
你想要的
您可以在排序函数()中使用它:
你想要的
您可以在排序函数()中使用它:
尝试选择排序并放置一个条件,将X设置为最高值。您可以将比较器函数传递给Array.sort()以满足您的需要。可能重复尝试选择排序并放置条件以将X设置为最高值。您可以将比较器函数传递给Array.sort()以满足您的需要。在我看来,OP可能使用字符串值,因此您可能需要将示例更改为BitThank@Nina。实际上,它就像一个事件监听器,当在html中选择列时,总是需要对其进行排序。您能再解释一下比较器吗?很难理解,在我看来,OP可能使用字符串值,所以您可能需要将示例更改为BitThank@Nina。实际上,它就像一个事件监听器,当在html中选择列时,总是需要对其进行排序。您能再解释一下比较器吗?对像
{v:7}
这样的对象进行排序,用比较器({v:a},{v:b})
替换比较器(a,b)
是很难理解的,谢谢。这是清楚的。您能解释一下我如何在事件侦听器中使用它吗?目前,我正在使用以下堆栈溢出帖子的答案进行偶数排序:只要您有一个包含数组的变量,就可以将该函数插入其中。@Luca,我尝试过,但仍然无法使其工作,因为我需要在代码中添加一些“event”。我正在使用的原始文件是:data.sort([{column:event.column,desc:!event.ascending}]);。如何更改代码,使a和b引用偶数.column的条目?要对像{v:7}
这样的对象进行排序,请将比较器(a,b)
替换为比较器({v:a},{v:b})
@Luca,谢谢。这是清楚的。您能解释一下我如何在事件侦听器中使用它吗?目前,我正在使用以下堆栈溢出帖子的答案进行偶数排序:只要您有一个包含数组的变量,就可以将该函数插入其中。@Luca,我尝试过,但仍然无法使其工作,因为我需要在代码中添加一些“event”。我正在使用的原始文件是:data.sort([{column:event.column,desc:!event.ascending}]);。如何更改代码,使a和b引用偶数列的条目?
["17", "7", "9", "X"].sort(function(a,b) {
return a.localeCompare(b, undefined, {numeric: true})
})
// ["7", "9", "17", "X"]