2017-10-04 91 views
0

我有以下琴絃組,其中I需要重新安排基於日期,這就需要進行排序最早到最舊重新排列數據

[ 
    "2015-08, xyz, 4", 
    "2016-03, abc, 5", 
    "2015-12, ter, 76", 
    "2015-12, rep, 14" 
] 

最終輸出需要的最終輸出的陣列的看起來像

[ 
    "2016-03, abc, 5", 
    "2015-12, ter, 76, rep, 14", 
    "2015-08, xyz, 4" 
] 

我該如何去做這件事?

+1

你在這裏的問題到底是什麼?或者你只是希望有人會爲你做所有的辛苦工作? – Liam

+0

@Liam絕對不是,只是尋找一些關於解決問題的指導(僞代碼格式) – RRP

+0

只需使用默認的.sort(),然後顛倒數組。只要字符串以年份開始,然後是daya的兩個數字,.sort()。reverse()就可以工作。當日期不是以允許按字符串值而不是實際日期排序的格式編寫時,它會變得棘手。 (例如,DD/MM/YYYY的歐元格式不能默認爲字符串)我會讓你自己弄清楚字符串的合併,因爲它與排序無關。 – Shilly

回答

2

不是一個完整的解決方案,但它會給你實現你的基礎。

您的數據排序:

的想法是,你定義一個包含有關如何比較兩個的數組元素,然後調用默認sort功能與參數的邏輯函數(SortByDate在我們的例子)您定義的新功能。

data = [ 
 
    "2015-08, xyz, 4", 
 
    "2016-03, abc, 5", 
 
    "2015-12, ter, 76", 
 
    "2015-12, rep, 14" 
 
]; 
 

 

 

 
//This is the logic 
 
function SortByDate(a, b){ 
 
    dateA = a.split(",")[0];  // e.g. a="2015-08, xyz, 4" dateA="2015-08" 
 
    yearA = dateA.split("-")[0]; // e.g. "2015" 
 
    monthA = dateA.split("-")[1]; // e.g. "08" 
 
    
 
    dateB = b.split(",")[0]; 
 
    yearB = dateB.split("-")[0]; 
 
    monthB = dateB.split("-")[1]; 
 
    
 
    if (parseInt(yearA) < parseInt(yearB)) return -1; 
 
    if (parseInt(yearA) > parseInt(yearB)) return 1; 
 
    if (parseInt(yearA) == parseInt(yearB)) { 
 
    if (parseInt(monthA) < parseInt(monthB)) return -1; 
 
    if (parseInt(monthA) > parseInt(monthB)) return 1; 
 
    if (parseInt(monthA) == parseInt(monthB)) return 0; 
 
    } 
 

 
} 
 

 
data.sort(SortByDate); 
 
console.log(data);

下一步:

  1. 迭代您的數組再次
  2. 如果發現等於日期
  3. 合併這些元素

最後一部分可能會非常棘手,因爲您的數組將會丟失一些元素,並且其大小會減小。你可能想看看這個:Looping through array and removing items

+1

感謝@tgogos我使用.sort()。reverse(),但合併和刪除元素的鏈接有助於 – RRP