javascript - 对数据表中的列进行排序
问题描述
如何在不考虑括号中的内容的情况下按第一个值对列进行排序?
我添加了一个 type sort
,但它没有按我的需要排序。
我在 jsfiddle 上添加了我的代码示例:http: //jsfiddle.net/alexserden/8geodt1b/27/
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+'%)'
}
}}
});
});
解决方案
只是为了澄清问题(以防我误解了)。以第 9 列为例。如果您现在对该数据进行排序,您会看到:
值未按预期排序。
你想看到的是这样的:
为此,我进行了以下更改:
"columns"
1)我在您的部分末尾添加了 3 个新列:
{ "data": "hired", "visible": false },
{ "data": "fired", "visible": false },
{ "data": "staffing", "visible": false }
这些是第 11、12、13 列 - 但它们的索引是 10、11、12。
"orderData"
2)我在包含您要忽略的额外数据的三列中添加了一个新元素:
{"data": null, "orderData": [ 10 ], render: ... // the "hired" data
{"data": null, "orderData": [ 11 ], render: ... // the "fired" data
{"data": null, "orderData": [ 12 ], render: ... // the "staffing" data
这意味着“已雇用”列将使用列索引 10 中的数据作为其排序数据。但是列索引 10 是隐藏的,所以用户看不到它。并且对额外的 2 列重复此方法。
最后说明:
我对您的 JSON 进行了细微更改,以使其成为有效的 JSON:
例如:
'city': "NewYork", // invalid
"city": "NewYork", // valid
这是我最终使用的:
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"
}];
推荐阅读
- c++ - 如何在 Visual Studio 2017 中编译 7zip 源代码?
- json - 如何在 Mongodb 中使用特定条件增加一些数字字段(但字符串)?
- nuxt.js - 为什么 Create-Nuxt-App 安装 nuxt 版本 1.4.5?
- visual-studio - 如何使用 NUnit 3.11 配置 Specflow 3.0.199?
- powershell - 使用 Powershell 从文件中提取 Git URL
- python - 如何使用 Selenium 和 Python 在 Wells Fargo 帐户中登录
- data-warehouse - 如何整合各种数据集市?
- c - 如何在另一个 C 文件中访问在一个 C 文件中声明的指向字符串文字的外部指针?
- python-3.x - 如何提高有偏见的 CNN 模型性能?(Keras,张量流)
- node.js - 文件在存储桶中被覆盖时下载 URL 更改。如何保留原始网址