Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何返回表列数据类型进行排序_Javascript - Fatal编程技术网

Javascript 如何返回表列数据类型进行排序

Javascript 如何返回表列数据类型进行排序,javascript,Javascript,我有这个Javascript来生成表,我在标题标记中添加了一个单击事件,这样用户就可以单击一个列名进行排序,但我现在需要在数据集中对列进行排序,所以我需要知道要传递给函数sort\u col()的列名和数据类型无论是字符串、数字还是日期,都可以基于此数据类型进行排序,那么我如何才能做到这一点 var数据集=[ {“field1”:“dfg34r”,“field2”:“32.24”}, {“field1”:“d3f32dg”,“field2”:“32.52”,“fdate”:“3/2/2015”

我有这个Javascript来生成表,我在标题标记中添加了一个单击事件,这样用户就可以单击一个列名进行排序,但我现在需要在
数据集中对列进行排序,所以我需要知道要传递给函数
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);
}