0

問題が発生しています。連絡先を名前で並べ替えていますが、名前が表示されていない連絡先に遭遇することがあります。このメソッドを変更して機能させる方法を知っている人はいますか? ありがとう

これは私が使用しているソート方法です。

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

4 に答える 4

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
};
于 2012-10-13T10:31:20.327 に答える
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
}
于 2012-10-13T11:31:24.917 に答える
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
};
于 2012-10-13T11:20:51.523 に答える
0

その属性を持たないオブジェクトをどのように扱いたいかによって異なります。

ただし、これをソート関数の先頭に追加すると、存在しない属性を比較できなくなります。

if (ob1.firstName == undefined || ob2.firstName == undefined) {
    return 0;
}
于 2012-10-13T10:35:25.250 に答える