我正在使用标准的Javascript " sort“函数对表中列中的元素进行排序。问题是那个人让我每三位加一个逗号,然后加一个。小数点后两位。
我的第一次搜索工作正常时,我有:
456345.00 456948.00 456949.34
但是现在当我输入的时候,它不能排序
456,949.34
我需要一种方法来覆盖.sort和.reverse javascript函数!
或者我需要以某种方式删除逗号。和分数部分,然后相应地排序,然后添加细节。
以下是示例源代码
$('#results').on("click", "th", function(){
var table = $(this).parents('table').eq(0)
var rows = table.find('tr:gt(0)').toArray();
rows.splice(-1, 1);
rows.sort(comparer($(this).index()));
this.asc = !this.asc
if (!this.asc){rows = rows.reverse()}
for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index)
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
}
}
function getCellValue(row, index){ return $(row).children('td').eq(index).text() }
});发布于 2016-05-17 05:00:57
Javascript array sort接受一个比较器函数,该函数作用于实际数组中的值。不需要读取外部数据(我假设您的比较器正在尝试这样做)。
这应该足够了
function comparer(a, b) {
a = parseFloat(a.replace(/,/g,''));
b = parseFloat(b.replace(/,/g,''));
return a-b;
}这将获取数组,并(在排序中)删除逗号,将其转换为浮点数,并返回比较结果,从而得到正确排序的数组,其中仍包含逗号格式的项。
发布于 2016-05-17 06:37:27
构建在@Wainage的answer...replace上,您已经使用下面的代码发布了整个代码。我删除了数字中的逗号和小数,因为在我的理解中,当你将12.34与12.23进行比较时,无论有没有小数点,答案都是一样的。
因此12.34 > 12.23和1234 > 1223
在我的小提琴中,我使用了大数和逗号,例如。555,444,440.00我假设这些数字小于9007199254740991,这是整数大小的限制。
这里有一个指向fiddle http://jsfiddle.net/pparas/Zhd2X/694/的链接
$('th').click(function(){
var table = $(this).parents('table').eq(0)
var rows = table.find('tr:gt(0)').toArray();
rows.splice(-1, 1);
rows.sort(comparer($(this).index()));
this.asc = !this.asc
if (!this.asc){rows = rows.reverse()}
for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index);
if(($.isNumeric(valA.replace(/[,.]/g,''))) && ($.isNumeric(valB.replace(/[,.]/g,'')))){
valA = parseInt(valA.replace(/[,.]/g,''));
valB = parseInt(valB.replace(/[,.]/g,''));
}
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
}
}
function getCellValue(row, index){ return $(row).children('td').eq(index).html() }谢谢,
Paras
https://stackoverflow.com/questions/37262799
复制相似问题