2014-09-25 37 views
0

我在排序數組時遇到問題。關於這些排序算法,我不是最聰明的。 數組應具有以下結構:以特殊方式對數組排序

var arr = [ 
[week, IssuesPriority1, IssuesPriority2, IssuesPriority3], 
[week, IssuesPriority1, IssuesPriority2, IssuesPriority3], 
[week, IssuesPriority1, IssuesPriority2, IssuesPriority3], 
... 
]; 

所以對於每星期有許多用於優先級非常高,高,中問題。 需要在這個結構被解析的字符串是以下幾點:

var string = 
"26|3|1,27|6|1,28|7|1,29|2|1,30|2|1,31|2|1,32|2|1,33|3|1, 
    35|1|1,34|2|1,36|0|1,37|0|1,38|1|1,26|11|2,27|10|2,28|9|2, 
    29|13|2,30|10|2,31|8|2,32|10|2,33|12|2,34|14|2,35|11|2, 
    36|11|2,37|12|2,38|14|2,27|17|3,26|13|3,29|26|3,28|21|3,30|25|3, 
    31|20|3,34|30|3,32|18|3,33|25|3,35|33|3,36|28|3,38|28|3,37|27|3"; 

    var arr = string.split(","); 

    for(var i = 0; i < arr.length; i++){ 
     var currentArr = arr[i].split("|"); 
     var week = currentArr[0]; 
     var issues = currentArr[1]; 
     var priority = currentArr[2]; 
    } 

我有一個缺乏思想在希望的方式排序的。你可以幫我嗎?

+0

'周'是你的排序比較器嗎? – 2014-09-25 15:13:59

+0

首先構建數組,然後'.sort()'它。排序它有什麼問題?訂單應該是什麼樣子,你想訂購哪種「特殊方式」? – Bergi 2014-09-25 15:16:28

+0

是的,每週都屬於3個問題值。 – sanyooh 2014-09-25 15:17:05

回答

0

我不認爲你想要任何排序根本。您正在尋找分組

var arr = string.split(","); 
var weeks = {}; 
for (var i = 0; i < arr.length; i++) { 
    var currentArr = arr[i].split("|"); 
    var week = currentArr[0]; 
    var issue = currentArr[1]; 
    var priority = currentArr[2]; 
    if (!(week in weeks)) 
     weeks[week] = {1:[], 2:[], 3:[]}; 
    // if the number of issues levels were unknown, 
    // you'd start with an empty object instead 
    // and create the arrays dynamically in a manner similar to the weeks 
    weeks[week][priority].push(issue); 
} 
return Object.keys(weeks).map(function(week) { 
    return [week, weeks[week][1], weeks[week][2], weeks[week][3]]; 
}); 

(度日週數排序結果,.map()調用之前添加sort(function(a,b){return a-b})

0

在你情我願向推薦的值放入數組中的第一個。在第二步中,我將使用sort method對數組進行排序。

function getSortedArrayByString(myString) { 
    var arraySplittedString, i, tmpValueArray, tmpInnerArray, resultingArray; 

    arraySplittedString = myString.split(","); 
    resultingArray = []; 

    for(i = 0; i < arraySplittedString.length; i++){ 
     // tmpArray has the format of [<week>, <IssuesPriority1>, <IssuesPriority2>] 
     tmpValueArray = arraySplittedString[i].split("|"); 
     // Push it in the new array. 
     resultingArray.push(tmpValueArray); 
    } 

    // Sort array by weeks ascending. 
    resultingArray.sort(function (a, b) { 
     return a[0] - b[0]; 
    }); 

    return resultingArray; 
} 

運行fiddle

如果您還想按問題計數排序,您只需自定義內部排序功能即可。

使用此解決方案,所有值都保存爲字符串。您可以使用parseInt function轉換它們。