Javascript按字母顺序排列字典数组,可能包含空值

时间:2012-10-13 10:26:09

标签: javascript arrays sorting

我遇到了一个问题。我按照他们的名字对联系人进行排序,但有时我会遇到一个缺少名字的联系人。有谁知道如何更改此方法以使其工作? 感谢

这是我正在使用的排序方法。

function sortAZ(ob1,ob2) {
    var n1 = ob1.firstName.toLowerCase()
    var n2 = ob2.firstName.toLowerCase()
    if (n1 > n2) {return 1}
    else if (n1 < n2){return -1}
    else { return 0}//nothing to split
};

data.sort(sortAZ);

4 个答案:

答案 0 :(得分:1)

function sortAZ(ob1,ob2) {
    // Handles case they're both equal (or both missing)
    if (obj1 == obj2) {return 0}
    // Handle case one is missing
    if (obj2 == null|| obj2 == "") {return 1}
    if (obj1 == null|| obj1 == "") {return -1}

    var n1 = ob1.firstName.toLowerCase()
    var n2 = ob2.firstName.toLowerCase()
    if (n1 > n2) {return 1}
    else if (n1 < n2){return -1}
    else { return 0}//nothing to split
};

答案 1 :(得分:0)

这取决于您希望如何处理没有该属性的对象。

但是将它添加到sort函数的顶部会阻止它比较不存在的属性。

if (ob1.firstName == undefined || ob2.firstName == undefined) {
    return 0;
}

答案 2 :(得分:0)

请注意,这是对PherricOxide答案的修改。感谢

function sortAZ(obj1,obj2) {
    // Handles case they're both equal (or both missing)
    if (obj1 == obj2) {return 0}

    // Handle case firstName is missing
    if (obj2.firstName == null || obj2.firstName == "") {return 1}
    if (obj1.firstName == null || obj1.firstName == "") {return -1}

    var n1 = ob1.firstName.toLowerCase()
    var n2 = ob2.firstName.toLowerCase()
    if (n1 > n2) {return 1}
    else if (n1 < n2){return -1}
    else { return 0}//nothing to split
};

答案 3 :(得分:0)

在比较之前首先检查对象及其属性是否存在。如果他们错过了,请返回1-1对其进行排序或最终排序。

function sortAZ(ob1, ob2) {
    if (!ob1) return -1;
    if (!ob2) return 1;
    // if (ob1 == ob2) return 0; // equal
    if (typeof ob1.firstName != "string") return -1;
    if (typeof ob2.firstName != "string") return -1;

    var n1 = ob1.firstName.toLowerCase()
    var n2 = ob2.firstName.toLowerCase()
    if (n1 > n2) return 1;
    if (n1 < n2) return -1;
    return 0; // equal
}