目前我有一個數組,我想按3鍵排序。爲簡單起見,陣列看起來像這樣:3鍵排序 - Javascript
bArray = [
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10000", Qty: "1"},
{StartDate:"Jun 3, 2017", ID:"CDE-001", Serial:"10004", Qty: "1"},
{StartDate:"Mar 1, 2017", ID:"ABC-002", Serial:"10001", Qty: "3"},
{StartDate:"Apr 2, 2017", ID:"CDE-001", Serial:"10003", Qty: "1"},
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10002", Qty: "1"},
]
我想按所有3個按鍵升序排序。先按日期,然後按ID,然後按序列。
我設法讓它適用於日期和ID,但是,當我在代碼中添加串行比較時,出現意外結果,其中ID和串行可能有異常。
bArray = [
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10000", Qty: "1"},
{StartDate:"Mar 1, 2017", ID:"ABC-002", Serial:"10001", Qty: "3"},
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10002", Qty: "1"},
{StartDate:"Apr 2, 2017", ID:"CDE-001", Serial:"10003", Qty: "1"},
{StartDate:"Jun 3, 2017", ID:"CDE-001", Serial:"10004", Qty: "1"}
]
的第二和第三行應該被反轉,因爲ID應該優先於編號:例如,它可以是這樣,當我運行的代碼進行排序。
我的代碼如下:
bArray.sort(function (c,d){
if (c.StartDate > d.StartDate) { return 1; }
else if (d.StartDate < c.StartDate) { return -1; }
if (c.ID > d.ID) { return 1; }
else if (d.ID < c.ID) { return -1; }
if (c.Serial > d.Serial) { return 1; }
else if (d.Serial < c.Serial) { return -1; }
else { return 0; }
});
我想還提到,我排數組是超過100條+線。
任何有識之士都非常感謝。
感謝, 文森特
你有沒有意識到你是通過串排序日期,而不是日期?串行按字符串排序,而不是數字排序。 – epascarello
日期正常工作 - 它們是真實場景中的日期數據類型 串行可以是字符串或數字或兩者的組合 –