2012-10-13 3 views
0

문제점이 있습니다. 나는 그들의 이름으로 연락처를 정렬하고 있지만 때로는 이름이 누락 된 연락처를 실행합니다. 누구든지 작동하도록이 방법을 변경하는 방법을 알고 있습니까? 감사합니다.Javascript 가능한 null 값으로 사전 순으로 사전 배열 정렬

이것은 내가 사용하고있는 정렬 방법입니다.

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