2012-10-13 42 views
0

我遇到了問題。我按照名字對聯繫人進行排序,但有時會遇到缺少名字的聯繫人。有誰知道如何改變這種方法使其工作? 謝謝Javascript排序按字母順序排列的數組可能的空值

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

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); 

回答

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 
}; 
+0

我稍微修改了它,但似乎無法將它發佈在評論中。我會在下面發佈。感謝您的回答,它似乎運作良好。 –

+0

雖然沒有'NULL' – Bergi

0

這取決於你想如何對待那些沒有該屬性的對象。

但將此添加到排序函數的頂部將阻止它比較不存在的屬性。

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

'return 0'不是(總是)正確的響應。 – Bergi

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 
}; 
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 
}