gpt4 book ai didi

javascript - 在 Javascript 中对表的一列进行排序无法正常运行

转载 作者:行者123 更新时间:2023-11-29 19:03:13 25 4
gpt4 key购买 nike

我有以下来自 w3schools 的 Javascript 函数来对列进行排序:

function sortTable(n) {
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
table = document.getElementById("myTable");
switching = true;
//Set the sorting direction to ascending:
dir = "asc";
/*Make a loop that will continue until
no switching has been done:*/
while (switching) {
//start by saying: no switching is done:
switching = false;
rows = table.getElementsByTagName("TR");
/*Loop through all table rows (except the
first, which contains table headers):*/
for (i = 1; i < (rows.length - 1); i++) {
//start by saying there should be no switching:
shouldSwitch = false;
/*Get the two elements you want to compare,
one from current row and one from the next:*/
x = rows[i].getElementsByTagName("TD")[n];
y = rows[i + 1].getElementsByTagName("TD")[n];
/*check if the two rows should switch place,
based on the direction, asc or desc:*/
if (dir == "asc") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
//if so, mark as a switch and break the loop:
shouldSwitch= true;
break;
}
} else if (dir == "desc") {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
//if so, mark as a switch and break the loop:
shouldSwitch= true;
break;
}
}
}
if (shouldSwitch) {
/*If a switch has been marked, make the switch
and mark that a switch has been done:*/
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
//Each time a switch is done, increase this count by 1:
switchcount ++;
} else {
/*If no switching has been done AND the direction is "asc",
set the direction to "desc" and run the while loop again.*/
if (switchcount == 0 && dir == "asc") {
dir = "desc";
switching = true;
}
}
}
}

但是它在我名为 Internet Explorer Version 的专栏中效果不佳。

它与我表格的其他列配合使用效果很好。我不知道为什么会这样。谁能告诉我出了什么问题?

我将这些值复制到 Excel 工作表上并尝试对其进行排序,但也无法正确排序。是值(value)观的问题吗?

它只是考虑数字的第一位,然后进行排序。我该如何解决这个问题?

最佳答案

按字符串操作比较规则结果是正确的,但您的要求不同。

字符串比较是如何发生的?一个

  1. 它比较两个字符串的第一个数字的 UTF-16 值,如果相等则比较下一个字符。

  2. 如果 A 的字符串在某个点上的字符小于 B,则 A String 将更小。

  3. 如果有任何一个字符串在得出结论之前就结束,则认为是小字符串。

例如

  1. "10.0.9200.17609"< "11.0.15063.0"= true 因为第二个数字 0 < 1
  2. "9"< "101"= false 因为 '9' 的 UTF-16 值大于 '1'
  3. "101"< "1011"= true 因为直到 3 个字符都相等并且第一个字符串结束所以它更小。

对于您的问题,您需要在 .(点)上拆分您的号码例如拆分后的“10.0.9200.17609” [10, 0, 9200, 17609]那么您需要使用以下比较器函数来确定排序算法中哪个元素较小。

/** 
A and B will be array and element are integer
return true if A < B else false
**/
function comparator(A, B) {
var a_length = A.length, b_length = B.length;
var loop_count = min(a_length, b_length);
for(var i = 0; i < loop_count; i++) {
if(A[i] < B[i])
return true;
else if (A[i] > B[i])
return false;
}

if(a_length < b_length)
return true;

return false;
}

关于javascript - 在 Javascript 中对表的一列进行排序无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45241000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com