简体   繁体   English

对数据表中的列进行排序

[英]Sort column in dataTable

How can I sort a column by first value without considering what is in brackets?如何在不考虑括号中的内容的情况下按第一个值对列进行排序?
I added a type sort , but it doesn't sort as I need.我添加了一个类型sort ,但它没有按我的需要排序。
I added an example of my code on jsfiddle: http://jsfiddle.net/alexserden/8geodt1b/27/我在 jsfiddle 上添加了我的代码示例: http://jsfiddle.net/alexserden/8geodt1b/27/
Problem with 9 column. 9列有问题。

$("#myTable").DataTable({
    scrollY: '400px',
    width: 100,
    // responsive: true,
    searching: false,
    lengthChange: false,
    // bAutoWidth: true,
    // retrieve: true,
    paging: false,
    scrollX: false,
    data: data,
    columns: [
        {"data": "ourShort"},
        {"data": "espGroup"},
        {"data": "rd"},
        {"data": "city"},
        {"data": "hr"},
        {"data": "shr"},
        {"data": "vacancy"},
        {"data": null,  render: data => {

                if(data.deltaHired<=0){
                    return '<span>'+data.hired + '</span>' +' (▾'+data.deltaHired+')'
                }else{
                    return '<span>'+data.hired + '</span>' + ' (▴'+data.deltaHired+')'
                }
        }},
        {"data": null,className:"textAlignRight", type: 'sort', render: data => {
                if(data.deltaFired>=0){
                    return '<span>'+data.fired+'</span>'+' (▴'+data.deltaFired+')'
                }else{
                    return '<span>'+data.fired+'</span>' +' (▾'+data.deltaFired+')'
                }

            }},
        {"data": null, className:"textAlignRight", type: 'sort', render: data => {
                if(data.deltaStaffing<0){
                    return '<span>'+data.staffing + '%'+'</span>' +' (▾'+data.deltaStaffing*(-1)+'%)'
                }else{
                    return  '<span>'+data.staffing + '%'+'</span>' +' (▴'+data.deltaStaffing+'%)'
                }

        }}

    });
});

Just to clarify the problem (in case I have misunderstood).只是为了澄清问题(以防我误解了)。 Looking at column 9 as an example.以第 9 列为例。 If you sort that data now, you see this:如果您现在对该数据进行排序,您会看到:

在此处输入图像描述

The values are not sorted as expected.值未按预期排序。

What you want to see is this:你想看到的是这样的:

在此处输入图像描述

To do this I made the following changes:为此,我进行了以下更改:

1) I added 3 new columns at the end of your "columns" section: 1)我在"columns"部分的末尾添加了 3 个新列:

{ "data": "hired", "visible": false },
{ "data": "fired", "visible": false },
{ "data": "staffing", "visible": false }

These are columns 11, 12, 13 - but their indexes are 10, 11, 12.这些是第 11、12、13 列 - 但它们的索引是 10、11、12。

2) I added a new "orderData" element to the three columns which contain the extra data you want to ignore: 2)我在包含您要忽略的额外数据的三列中添加了一个新的"orderData"元素:

{"data": null,  "orderData": [ 10 ], render: ... // the "hired" data
{"data": null,  "orderData": [ 11 ], render: ... // the "fired" data
{"data": null,  "orderData": [ 12 ], render: ... // the "staffing" data

This means that the "hired" column will use data in column index 10 as its sort data.这意味着“已雇用”列将使用列索引 10 中的数据作为其排序数据。 But column index 10 is hidden, so the users do not see it.但是列索引 10 是隐藏的,所以用户看不到它。 And this approach is repeated for the additional 2 columns.并且对额外的 2 列重复此方法。

Final note:最后说明:

I made minor changes to your JSON, to make it valid JSON:我对您的 JSON 进行了细微更改,以使其有效 JSON:

For example:例如:

'city': "NewYork", // invalid

"city": "NewYork", // valid

Here is what I ended up using:这是我最终使用的:

let data = [{
    "city": "NewYork",
    "deltaFired": 0,
    "deltaHired": 0,
    "deltaStaffing": "2",
    "espGroup": 1,
    "fired": 9,
    "hired": 0,
    "hr": "Петренко",
    "ourShort": "Магазин 3",
    "rd": "Пузатенко",
    "shr": "65.0",
    "staffing": "68",
    "vacancy": "29.5"
}, {
    "city": "LosSantos",
    "deltaFired": 0,
    "deltaHired": 0.5,
    "deltaStaffing": "1",
    "espGroup": 1,
    "fired": 2,
    "hired": 9.4,
    "hr": "Сидоренко",
    "ourShort": "Магазин 4",
    "rd": "Петренко",
    "shr": "125.0",
    "staffing": "69",
    "vacancy": "45.3"
}, {
    "city": "Kiev",
    "deltaFired": 0,
    "deltaHired": 0,
    "deltaStaffing": "1",
    "espGroup": 1,
    "fired": 6,
    "hired": 9.7,
    "hr": "Выасильченко",
    "ourShort": "Магазин 1",
    "rd": "Иваненко",
    "shr": "109.0",
    "staffing": "29.39",
    "vacancy": "49.0"
}, {
    "city": "Kiev",
    "deltaFired": 0,
    "deltaHired": 0,
    "deltaStaffing": "1",
    "espGroup": 1,
    "fired": 6.2,
    "hired": 9,
    "hr": "Выасильченко",
    "ourShort": "Магазин 1",
    "rd": "Иваненко",
    "shr": "109.0",
    "staffing": "2.6",
    "vacancy": "49.0"
}, {
    "city": "Kiev",
    "deltaFired": 0,
    "deltaHired": 0,
    "deltaStaffing": "1",
    "espGroup": 1,
    "fired": 5.9,
    "hired": 5.5,
    "hr": "Выасильченко",
    "ourShort": "Магазин 1",
    "rd": "Иваненко",
    "shr": "109.0",
    "staffing": "39",
    "vacancy": "49.0"
}, {
    "city": "Kiev",
    "deltaFired": 0,
    "deltaHired": 0,
    "deltaStaffing": "1",
    "espGroup": 1,
    "fired": 6,
    "hired": 9.5,
    "hr": "Выасильченко",
    "ourShort": "Магазин 1",
    "rd": "Иваненко",
    "shr": "109.0",
    "staffing": "29.94",
    "vacancy": "49.0"
}, {
    "city": "Kiev",
    "deltaFired": 0,
    "deltaHired": 0,
    "deltaStaffing": "1",
    "espGroup": 1,
    "fired": 6,
    "hired": 9,
    "hr": "Выасильченко",
    "ourShort": "Магазин 1",
    "rd": "Иваненко",
    "shr": "109.0",
    "staffing": "29.987",
    "vacancy": "49.0"
}];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM