Javascript 如何根据数据项的属性对数据表中的复杂列进行排序?
我有这个数据表,列出了人。第一列包含一个人的3个属性:Javascript 如何根据数据项的属性对数据表中的复杂列进行排序?,javascript,jquery,datatables,Javascript,Jquery,Datatables,我有这个数据表,列出了人。第一列包含一个人的3个属性:[title][lastName][firstName] 例如,如果数据为: [ { "firstName":"Foo", "lastName":"Bar", "title":"Z" }, { "firstName":"John", "lastName":"Doe", "title":"A" } ]; 然后,当按升
[title][lastName][firstName]
例如,如果数据为:
[
{
"firstName":"Foo",
"lastName":"Bar",
"title":"Z"
},
{
"firstName":"John",
"lastName":"Doe",
"title":"A"
}
];
然后,当按升序排序时,默认情况下,行为:
A Doe John
Z Bar Foo
(“Z”之前的“A”)
但是,我希望它基于lastName
,而不是基于整个单元格内容的默认字符串排序。在这种情况下,我期望的升序排序是:
Z Bar Foo
A Doe John
(“Doe”之前的“Bar”)
我试着这样做:
var persons = [
{
"firstName":"Foo",
"lastName":"Bar",
"title":"Z"
},
{
"firstName":"John",
"lastName":"Doe",
"title":"A"
}
];
$.fn.dataTableExt.afnSortData["first-column"] = function (oSettings, iColumn) {
return jQuery.map(oSettings.oApi._fnGetTrNodes(oSettings), function (tr, i) {
return persons[i].lastName;
});
};
$("table").dataTable({
"aaData":persons,
"aoColumns":[
{
"sTitle":"First column",
"mData":function (source, type, val) {
return source.title + " " + source.lastName + " " + source.firstName;
},
"sSortDataType":"first-column"
}
]
});
对应的JSFIDLE:
但是这种自定义排序不起作用-它保留在单元格的第一个字母处,即
title
查看您的代码,您似乎正在使用datatable,为什么不使用datatable提供的排序功能呢
$("table").dataTable({
"aaData":persons,
"aaSorting": [[1, 'desc']]
]
});
Datatable是基于0的,因此当加载表的第二列时,这将对表进行排序,以使其成为默认值
来源:您的解决方案有效,但我不明白为什么-在我的示例中只有一列。另外,为什么
desc
?我想按姓氏升序排序。然后将其设置为asc:DSorry当我提到您的解决方案有效时,我写得太快了。我的问题中只有一列,正如您在JSFIDLE中看到的那样。如果您在一列中显示信息,我建议您在发送到前端之前格式化json,以处理可能的重复信息