gpt4 book ai didi

Javascript 对 HTML 表中的空值排序错误

转载 作者:行者123 更新时间:2023-12-01 15:05:03 25 4
gpt4 key购买 nike

我正在使用下面的 JavaScript 代码按字母和数字对表格进行排序。但是,它会将行与 null值在顶部而不是底部。

在下图中,取自 this我正在处理的 URL,在 Rank Change 列中从最大到最小对表格进行排序时,空值位于顶部而不是底部。

*在此表中,Null值是带有 NEW 标记或破折号的单元格。
*该问题适用于所有列/行

不应该将 Null 归类为小于 1 并按此类排序吗?我究竟做错了什么?

非常感谢任何帮助。

enter image description here

const getCellValue = (tr, idx) => tr.children[idx].innerText || tr.children[idx].textContent;

const comparer = (idx, asc) => (a, b) => ((v1, v2) =>
v1 !=='' && v2 !=='' && !isNaN(v1) && !isNaN(v2) ? v1 - v2 : v1.toString().localeCompare(v2)
)(getCellValue(asc ? a : b, idx), getCellValue(asc ? b : a, idx));

document.querySelectorAll('th').forEach(th => th.addEventListener('click', (() => {
const table = th.closest('table');
Array.from(table.querySelectorAll('tr:nth-child(n+2)'))
.sort(comparer(Array.from(th.parentNode.children).indexOf(th), this.asc = !this.asc))
.forEach(tr => table.appendChild(tr) );
})));

最佳答案

您可以检查 null首先检查值,然后检查两个值的有限性,例如可以强制为数字的数字或字符串,然后取数字的增量或按字符串排序。

例子:

 v1   v2  (v1 === null) - (v2 === null) isFinite(v1) && isFinite(v2)             result
---- ---- ----------------------------- ---------------------------------------- ------
null null true - true -> 0 true -> v1 - v2 0
null abc true - false -> 1 1
null 2 true - false -> 1 1
abc null false - true -> -1 -1
2 null false - true -> -1 -1
abc abc false - false -> 0 false -> v1.toString().localeCompare(v2) 0
abc 2 false - false -> 0 false -> v1.toString().localeCompare(v2) 1
2 abc false - false -> 0 false -> v1.toString().localeCompare(v2) -1
2 2 false - false -> 0 true -> v1 - v2 0

代码:
const comparer = (idx, asc) => (a, b) => ((v1, v2) =>
(v1 === null) - (v2 === null) ||
(isFinite(v1) && isFinite(v2)
? v1 - v2
: v1.toString().localeCompare(v2)
)
)(getCellValue(asc ? a : b, idx), getCellValue(asc ? b : a, idx));

工作示例:

var array = [null, 2, 1, 20, 11, 'b', 'aaa', 'a', null];

array.sort((v1, v2) =>
(v1 === null) - (v2 === null) ||
(isFinite(v1) && isFinite(v2)
? v1 - v2
: v1.toString().localeCompare(v2)
)
);

console.log(...array);

关于Javascript 对 HTML 表中的空值排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60699307/

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