当前位置: 首页 > 知识库问答 >
问题:

Javascript:将数组按升序分组

壤驷喜
2023-03-14

我有一个这样的数组:

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

因此,正如您所看到的,排序方法应该将所有数组分组,它们的数组[1]值匹配在一起(如升序行)

因此,以上示例中的值result[0][1]--

结果[1][0]--

顺便说一句:my_array-数组已经排序,因此my_array[x][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个答案

宗政昱
2023-03-14

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

"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>
吴山
2023-03-14

我理解您的要求;

  1. 取两个项目数组的给定数组(已按项目2排序)
  2. 将两个项目数组按顺序项目2分组(当遇到缺失的int时拆分它们)。
  3. 返回结果。
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));
 类似资料:
  • 我在学校的任务是创建一个程序,以升序排列数组的值。它几乎就在那里,但每当我输入“44 55 66 22 33 11 77 99 88 66”或它输出的任何数字 -858993460,11,22,33,44,55,66,66,77,88,或开头为负数 第一个数字到底怎么了?我是不是缺了什么? 我对C++很陌生,我不太明白这里的问题。如果有什么建议我可以用请告诉他们。 }

  • 假设我有两个NumPy数组 我希望根据中的值,将数组有效地拆分为子数组。 我想要的输出是 假设以零开始并按升序排序,那么最有效的方法是什么? 注意:这个问题是这个问题的排序版本:根据另一个数组的值(未排序,而是分组)将NumPy数组拆分为子数组

  • 有人能提供帮助,如何检查排序降序数组以及?干杯!

  • 我有一个对象数组。每个对象都有一个键“username”。 有没有一种快速的方法可以将这个对象数组按升序排序? 谢谢

  • 问题内容: 假设我有一个如下所示的Javascript数组: 什么方法适合将数组分块(拆分)为更小的数组,最多可以有10个元素? 问题答案: 该array.slice方法可以从一开始,中间,或自己需要的任何目的数组的结束提取切片,在不改变原来的数组。

  • 我在同一数组中有一对多关系的数据。该组织是按级别建立的。元素的父元素总是比其自身高一级,并由parentId引用。 如何从该数组中获取多级数组?最高级别的元素将是主数组,其子元素在javascript中作为子数组? 预期产出将是 谢谢