2017-04-26 44 views
1

我想根據value.first_name排序2個對象。一個按字母順序升序。另一個按字母順序排列。但是,他們都在排序上升。我究竟做錯了什麼?目標是根據first_name的值將對象排列在此數組中。按值排序對象不能按預期工作

var participants = [ 
    { 
    id: "992543", 
    first_name: "", 
    last_name: "", 
    company: null, 
    notes: "", 
    registrationType: "", 
    alerts: [ ], 
    reg_scan: null 
    }, 
    { 
    id: "999070", 
    first_name: "Tori", 
    last_name: "Fullard", 
    company: null, 
    notes: "", 
    registrationType: "Staff", 
    alerts: [ ], 
    reg_scan: null 
    }, 
    { 
    id: "99265", 
    first_name: "Ronald", 
    last_name: "Brown", 
    company: null, 
    notes: "", 
    registrationType: "Dean's Guest", 
    alerts: [ ], 
    reg_scan: null 
    }, 
    { 
    id: "992279", 
    first_name: "Laila", 
    last_name: "Shetty", 
    company: null, 
    notes: "", 
    registrationType: "Table Guest", 
    alerts: [ 
     { 
     alert_id: "1", 
     dismissed: "0" 
     } 
    ], 
    reg_scan: null 
    }, 
    { 
    id: "992248", 
    first_name: "Paul", 
    last_name: "Keenan", 
    company: null, 
    notes: "", 
    registrationType: "Table Guest", 
    alerts: [ ], 
    reg_scan: null 
    } 
    ]; 

var az_part = participants; 
var za_part = participants; 
az_part.sort(function(a, b) { 
    var nameA = a.first_name.toLowerCase(); 
    var nameB = b.first_name.toLowerCase(); 
    if (nameA > nameB) return 1; 
    if (nameA < nameB) return -1; 
    return 0; 
}); 

za_part.sort(function(a, b) { 
    var nameA = a.first_name.toLowerCase(); 
    var nameB = b.first_name.toLowerCase(); 
    if (nameA > nameB) return -1; 
    if (nameA < nameB) return 1; 
    return 0; 
}); 
+0

'az_part'和'za_part'是一回事,'participants'。只有一個數組,所以你要對同一個數組進行兩次排序。檢查'參與者',你會發現它也是以相同的方式排序,即使你的代碼沒有明確地排序它。你需要複製數組(''參加者.lice(0)''會做到這一點 - 你不需要在這裏深層複製) –

回答

3

所有三個變量az_partza_partparticipants指在存儲器中的完全相同的陣列。您正在使用升序來轉換該數組,然後立即使用降序重新排序該數組。

使用slice創建數組的淺拷貝:

var az_part = participants.slice(); 
var za_part = participants.slice(); 

(所謂「淺拷貝」我的意思是,這將創建一個新的列表,但不會創建新的對象的每個結果列表會。不同 - 並且可以按不同方式排序 - 但是如果你改變了內部的任何對象,例如participants[2].notes = "foo",它將改變每個列表中存在的對象。)