Javascript 如何返回表列数据类型进行排序
我有这个Javascript来生成表,我在标题标记中添加了一个单击事件,这样用户就可以单击一个列名进行排序,但我现在需要在Javascript 如何返回表列数据类型进行排序,javascript,Javascript,我有这个Javascript来生成表,我在标题标记中添加了一个单击事件,这样用户就可以单击一个列名进行排序,但我现在需要在数据集中对列进行排序,所以我需要知道要传递给函数sort\u col()的列名和数据类型无论是字符串、数字还是日期,都可以基于此数据类型进行排序,那么我如何才能做到这一点 var数据集=[ {“field1”:“dfg34r”,“field2”:“32.24”}, {“field1”:“d3f32dg”,“field2”:“32.52”,“fdate”:“3/2/2015”
数据集中对列进行排序,所以我需要知道要传递给函数sort\u col()的列名和数据类型
无论是字符串、数字还是日期,都可以基于此数据类型进行排序,那么我如何才能做到这一点
var数据集=[
{“field1”:“dfg34r”,“field2”:“32.24”},
{“field1”:“d3f32dg”,“field2”:“32.52”,“fdate”:“3/2/2015”},
{“field1”:“fdbhjjts”,“fdate”:“7/4/2015”}];
var cols=[];
函数addHeaders(表、键){
var row=table.insertRow();
对于(变量i=0;i最大键){
最大键=当前键;
max_idx=i;
}
}
var table=document.createElement('table');
addHeaders(表,Object.keys(数据集[max_idx]);
对于(var i=0;i
您可以对不同的数据类型做出哪些假设
编写一个函数来帮助您选择一个比较器,下面是一个这样一个函数的示例
function chooseSortType(exampleData) {
let choice = typeof exampleData;
if (choice === 'object') {
const type = [Date, Array, Foo, ...]
.find(objType => exampleData instanceof objType);
if (type) choice = type.constructor.name;
}
if (choice === 'string') {
// test against RegExps to match types, e.g.
if (/^\d{2}\/\d{2}\/\d{2}\d{2}?$/.test(exampleData))
choice = 'stringDate';
else if (false)
; // etc
}
const known = {
number(x, y) {
return y - x;
},
string(x, y) {
return x.localeCompare(y);
},
Date(x, y) {
return y.valueOf() - x.valueOf();
},
Array(x, y) {
return y.length - x.length;
},
stringDate(x, y) {
x = new Date(x);
y = new Date(y);
return y.valueOf() - x.valueOf();
}
};
return known[choice];
}
现在假设您想对数组进行排序,但不知道要按什么类型进行排序,您传入了一个要排序的数据示例,函数选择了正确的比较器
let arr = [[3, 3, 3], [1], [4, 4, 4, 4], [2, 2]];
arr.sort(chooseSortType(arr[0]));
// `arr` now [Array[1], Array[2], Array[3], Array[4]]
如果您只想查看已单击的列
for (i = 0; i < th.length; i++) {
th[i].addEventListener("click", function (evt) {sort_col(evt);)};
}
function sort_col(evt) {
alert(evt.target.innerText);
}