Javascript 对 HTML table 中具有不同位数的数字进行排序

Javascript sorting numbers in an HTML table with different number of digits

[编辑:这些都是改变我排序方式的好方法。但是我无法更改排序方法,除非你们中的一个人知道该怎么做。在我的 JS 中有一个很长的排序算法,我没有写。我不太确定如何编辑它以合并这些排序方法中的任何一种。因此,为什么我要求通过改变字符串本身来使它们按字母顺序排序的方法。]

我有一个 table,它有一个排序按钮,除 1 列外一切正常。

如何对 6"、12" 和 18" 进行排序?

由于引号的原因,它们按 6" 18" 12" 的顺序排序。我真的不想删除引号并在 header 中指定它以英寸为单位...我不想想在 6 之前放一个 0(这也可以)。理想情况下我想在 6 之前放一个 space,但是 space 在排序时被忽略了。有人有什么想法吗?

我的输入只是在一个简单的数组中定义:

var paras1 = [
  ["K"],
  ["-270°C to 1372°C, –454°F to 2501°F"],
  ['0.125 (1/8")', '0.1875 (3/16")', '0.250 (1/4")'],
  ['6"', '12"', '18"'], //-------THE LINE THAT I CARE ABOUT-------
  ["316SS"],
  ["Grounded", "Ungrounded", "Exposed"],
];

我试过以下方法:

 [' 6"', '12"', '18"'] //with space doesnt work
 ['06"', '12"', '18"'] //with 0 works and looks ugly
 ['6', '12', '18']     //works but not what i want

如果你有一些创意字符可以帮助排序,如果有帮助,你可以在第486行尝试一下,https://jsfiddle.net/msirkin/duw5nyqe/9/

通过在排序中设置比较函数,确保将字符串作为数字进行比较。

也许您有更好的方法将 class 名称添加到 table 列, 但在您的 fiddle 演示中:https://jsfiddle.net/msirkin/duw5nyqe/9/ 我在第 622 行,就在 eo_head_row.appendChild(headCell) 之前,以编程方式为列长度添加了 'sorttable_numeric' class。您可以为需要按数字排序的其他列添加更多这样的参数:(k == "para4" || k == "para5").

if (k == "para5") {headCell.className += ' sorttable_numeric';}

您可以使用 sorting with map 并使用数值。

// the array to be sorted
var list = ['18"', '6"', '12"'];

// temporary array holds objects with position and sort-value
var mapped = list.map(function(el, i) {
    return { index: i, value: el.match(/\d+(?=")/) };
});

// sorting the mapped array containing the reduced values
mapped.sort(function(a, b) {
    return a.value - b.value;
});

// container for the resulting order
var result = mapped.map(function(el){
    return list[el.index];
});

console.log(result);

或者直接对数值进行排序。

// the array to be sorted
var list = ['18"', '6"', '12"'];

list.sort(function(a, b) {
    function getNumber(s) { return s.match(/\d+(?=")/); }
    return getNumber(a) - getNumber(b);
});

console.log(list);