Javascript 如何根据数据项的属性对数据表中的复杂列进行排序?

Javascript 如何根据数据项的属性对数据表中的复杂列进行排序?,javascript,jquery,datatables,Javascript,Jquery,Datatables,我有这个数据表,列出了人。第一列包含一个人的3个属性:[title][lastName][firstName] 例如,如果数据为: [ { "firstName":"Foo", "lastName":"Bar", "title":"Z" }, { "firstName":"John", "lastName":"Doe", "title":"A" } ]; 然后,当按升

我有这个数据表,列出了人。第一列包含一个人的3个属性:
[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,以处理可能的重复信息