Javascript 以特殊方式对数组进行排序

Javascript 以特殊方式对数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我对数组排序有问题。对于这些排序算法,我不是最聪明的。 阵列应具有以下结构: var arr = [ [week, IssuesPriority1, IssuesPriority2, IssuesPriority3], [week, IssuesPriority1, IssuesPriority2, IssuesPriority3], [week, IssuesPriority1, IssuesPriority2, IssuesPriority3], ... ]; 因此,每周都有许

我对数组排序有问题。对于这些排序算法,我不是最聪明的。 阵列应具有以下结构:

 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];
  }

我缺乏以理想的方式进行分类的想法。你能帮我吗?

我想你根本不需要排序。您正在寻找分组


要获得按周数排序的结果,请在.map调用之前添加一个sortfunctiona,b{return a-b}。在您的情况下,我建议首先将值放入数组中。在第二步中,我将使用

跑步

如果您还想按问题数量排序,只需自定义内部排序函数即可


使用此解决方案,所有值都保存为字符串。您可以使用来转换它们。

您的排序比较器是在哪一周?首先构建数组,然后对其进行排序。你对分类有什么问题?排序应该是什么样的,您希望以何种特殊方式进行排序?是的,每周有3个问题值。@user3328233没有说明这些值应该如何排序。。。我们应该按周对条目进行排序吗?按问题优先顺序计算?按最高优先顺序。。。当数组被排序时,它应该是这样的:[[26,3,11,13],[27,6,10,17],[28,7,9,21],…]因此每周:在索引0上-周,索引1-优先级为1的问题,索引2-优先级为2的问题,索引3-优先级为3的问题
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]];
});
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;
}