在 JavaScript 中对字符串类型列进行排序

Sha*_*nam 1 javascript

我想知道如何对具有数字或“x”值(未定义)的列进行排序。使用传统排序,结果不正确,17 比 7 早出现。

例子:

17   
7    
9    
X
Run Code Online (Sandbox Code Playgroud)

想要将其排序为:

7    
9    
17   
X
Run Code Online (Sandbox Code Playgroud)

附言。
我在用:

var data = new google.visualization.DataTable()
data.addRow[{v:'17'}, {v:'7'}, {v:'9'}, {v:'X'}]
Run Code Online (Sandbox Code Playgroud)

我希望能够在事件监听器中对其进行排序。

Luc*_*bel 5

您可以在比较器函数中使用localeCompare该选项:{numeric:true}

let arr = ["17","7","9","X"];

function comparator(a,b) {
  return a.localeCompare(b, "en", {numeric:true});
}

console.log(
  arr.sort(comparator)
)
Run Code Online (Sandbox Code Playgroud)

如果你的数组是这种格式

[{ v: '17' }, { v: 'X' }, { v: '7' }, { v: '9' }];
Run Code Online (Sandbox Code Playgroud)

您必须稍微调整比较器:

[{ v: '17' }, { v: 'X' }, { v: '7' }, { v: '9' }];
Run Code Online (Sandbox Code Playgroud)