没有被调用排序的JavaScript Comparator函数

JavaScript Comparator Function for Sorting Not Being Called

本文关键字:JavaScript Comparator 函数 排序 调用      更新时间:2023-09-26

我试图为包含对象(键控)的数组获得以下JavaScript比较器函数,但下面的代码不起作用。

我在网上试了很多例子(根据我的需要改变它们),但到目前为止还没有好。

参见下面的代码。我做错了什么?

感谢您的宝贵时间。

(仅供参考,下面的容器对象通过AJAX调用被填充)

var teContainer = {};
for (var i = 0; i < result.d.length; i++) {
    var key = result.d[i].PersonId;
    teContainer[key] = {
        displayText: result.d[i].DLSPersonId + ' ' + result.d[i].PersonLastName + ', ' + result.d[i].PersonFirstName.substring(0, 5),
        tEFirstName: result.d[i].PersonFirstName,
        tELastName: result.d[i].PersonLastName,
        tEID: result.d[i].PersonId,
        orgID: result.d[i].DLS_OrgId
    };
}
function tECompare(a, b) {
    if (a.tELastName < b.tELastName)
        return -1;
    if (a.tELastName > b.tELastName)
        return 1;
    return 0;
}
teContainer.sort(tECompare);

Edit: Thanks to the answer;下面是正确的代码:

var teContainer = [];
for (var i = 0; i < result.d.length; i++) {
    teContainer.push = ({
        displayText: result.d[i].DLSPersonId + ' ' + result.d[i].PersonLastName + ', ' + result.d[i].PersonFirstName.substring(0, 5),
        tEFirstName: result.d[i].PersonFirstName,
        tELastName: result.d[i].PersonLastName,
        tEID: result.d[i].PersonId,
        orgID: result.d[i].DLS_OrgId
    });
}
function tECompare(a, b) {
    if (a.tELastName < b.tELastName)
        return -1;
    if (a.tELastName > b.tELastName)
        return 1;
    return 0;
}
teContainer.sort(tECompare);

没有运行,因为sort不是对象的方法。teContainer是一个对象,而不是数组。您可能会得到以下错误:

Calling undefined method "sort"

总的来说你的代码是好的。关于排序的主要问题是,'sort'函数只适用于Array,而不适用于Object。

假设Ajax结果格式为:

var result = {
  d: [
    {
      PersonId: 1,
      DLSPersonId: 1,
      PersonLastName: "Doe",
      PersonFirstName: "John",
      DLS_OrgId: 1
    },
    {
      PersonId: 2,
      DLSPersonId: 2,
      PersonLastName: "Smith",
      PersonFirstName: "Alex",
      DLS_OrgId: 2
    },
    {
      PersonId: 3,
      DLSPersonId: 3,
      PersonLastName: "Vera",
      PersonFirstName: "Luis",
      DLS_OrgId: 3
    }
  ]
};

这是一个演示

*在演示中,我没有改变你的容器对象,以防你需要它。