Javascript:将数组分组为升序

时间:2017-12-01 21:50:18

标签: javascript arrays sorting

我有一个这样的数组:

var my_array = [[6, 2], [7, 3], [9, 4], [9, 6], [3, 7]] 


...我希望将数组排在不同的组中,如下所示:

var result = [ [6, 2], [7, 3], [9, 4] ], 
             [ [9, 6], [3, 7] ] 

因为你可以看到sort方法应该将它们的array[1]值匹配在一起的所有数组(如升序行)

以上示例中的值result[0][1] - > 2 result[1][1] - > 3 result[0][3] - > 4 正在匹配。

小组result[1][0] - > 6 result[1][1] - > 7 正在匹配。

BTW:my_array - 数组已经排序,因此my_array[x][1] <= my_array[x+1][1]

我不知道如何对此进行编码,所以这就是我现在所做的一切:

var my_array = [[6, 2], [7, 3], [9, 4], [9, 6], [3, 7]] 


function sort_array(array) {
  var group=[];
  for (var i=array[0][1]; i<3; i++) {
   if (array[i+1][1] == i) {
    group.push(array[i+1])
   }
   else {
    
   }
  }
  return group;

}


console.log(sort_array(my_array));

2 个答案:

答案 0 :(得分:0)

我对您的要求的理解;

  1. 获取两个项目数组的给定数组(已按项目2排序)
  2. 按顺序项2对两个项目数组进行分组(当遇到缺少的int时将它们拆分)。
  3. 返回结果。
  4. &#13;
    &#13;
    var my_array = [[6, 2], [7, 3], [9, 4], [9, 6], [3, 7]] 
    
    
    function sort_array(array) {
      var results = [];
      var tmp = [];
      for(var i = 0; i < array.length; i++){
        tmp.push(array[i]);
        if(i== array.length -1 || array[i][1] != (array[i+1][1]-1)){
          results.push(tmp);
          tmp = [];
        }
      } 
      
      return results;
    }
    
    
    console.log(sort_array(my_array));
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

你可以使用递归进行分组,它基本上比较当前和下一个数字,如果下一个数字是连续的,它将继续自我调用,如果它不是连续的,它将添加一个新的组然后调用自己,直到有没有下一个价值。

"use strict" // this will allow tail call recursion in modern browsers

const my_array = [[5, 0], [6, 2], [7, 3], [9, 4], [9, 6], [3, 7], [4, 10]] 

function groupConsecutiveYs([curr, ...rest], acc = [[]]) {
  const next = rest[0]
  // add to current group
  acc[acc.length - 1].push(curr)

  if (typeof next === 'undefined') // we are done return the accumulator
    return acc

  // if next is not consecutive add another grouping
  if (curr[1] !== next[1] - 1)
    acc.push([])
  
  // call recursive function again
  return groupConsecutiveYs(rest, acc)
}

console.log(
  groupConsecutiveYs(my_array)
)
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js?concise=true"></script>