2017-02-28 41 views
0

這個問題是不同於者指出,因爲我想通過一個字符串,然後一個數字和字符串進行排序等由多個(混合數字和字符串)的JavaScript類型的數組字段

我一直打算關閉的

javascript sort array by multiple (number) fields

我已經將我的數據如下:

function GetStudentList(){ 
    var sl = [ 
    { 
      "ClassOrder": 1, 
      "LastName": "Blow", 
      "FirstName": "Joe", 
      "Class": "170-2" 
    }, 
    { 
      "ClassOrder": 2, 
      "LastName": "Jane", 
      "FirstName": "Sally", 
      "Class": "170-1" 
    }, 
    { 
      "ClassOrder": 1, 
      "LastName": "Belmont", 
      "FirstName": "John", 
      "Class": "170-1" 
    } 
] 
return(sl); 
} 

然後我打電話的代碼:

var selectedStudents = GetStudentList(); 
selectedStudents.sort(function(a,b){ 
    return a.LastName - b,LastName; 
}; 

它似乎工作時,我在瀏覽器中跟蹤它,但只要我離開sort函數,selectedStudents數組恢復。它似乎工作,但只有ClassOrder數據。然後,如果我嘗試按ClassOrder和THEN姓氏進行排序,則不會再有效。

return a.ClassOrder - b.ClassOrder || a.LastName - b.LastName 
+0

您不能'-'比較字符串,即僅適用於數字。 – Bergi

回答

-1

您不應該將字符串與-進行比較。相反,使用<>分別進行降序或升序排序。

let sl = [ 
 
    { 
 
    "ClassOrder": 1, 
 
    "LastName": "Blow", 
 
    "FirstName": "Joe", 
 
    "Class": "170-2" 
 
    }, 
 
    { 
 
    "ClassOrder": 2, 
 
    "LastName": "Jane", 
 
    "FirstName": "Sally", 
 
    "Class": "170-1" 
 
    }, 
 
    { 
 
    "ClassOrder": 1, 
 
    "LastName": "Belmont", 
 
    "FirstName": "John", 
 
    "Class": "170-1" 
 
    } 
 
]; 
 

 
sl.sort((a, b) => { 
 
    if (a.LastName > b.LastName) return 1; 
 
    else if (a.LastName < b.LastName) return -1; 
 
    return 0; 
 
}); 
 

 
console.log(sl);

+1

(http://stackoverflow.com/q/24080785/1048572) – Bergi

+0

這很有用,但爲什麼我的編輯器(即Dreamweaver和Visual Studio突出顯示「=>」,並說這是一個語法錯誤? – Keltanis

+0

@Bergi你是對的,我的歉意 – Gavin

相關問題