JavaScript:对每列中的项目进行排序

JavaScript:对每列中的项目进行排序,javascript,Javascript,我有一个按数字排序的数组列表,它按行显示X个项目 data.people.sort(function (a, b) { return a.grade - b.grade; }); 数组中的每个项目中都有两个数字。当前网格按第一个数字(按行)排序。现在,我想按第二个数字对每列的结果进行(垂直)排序。试试看 function custom_sort (_arr, columnCount) { var cols,c,arr2,arr = _arr.sort(function (a,

我有一个按数字排序的数组列表,它按行显示X个项目

data.people.sort(function (a, b) {

    return a.grade - b.grade;

});
数组中的每个项目中都有两个数字。当前网格按第一个数字(按行)排序。现在,我想按第二个数字对每列的结果进行(垂直)排序。

试试看

function custom_sort (_arr, columnCount) {
  var cols,c,arr2,arr = _arr.sort(function (a, b) {
    return a.grade - b.grade;
  });

  cols = [];
  for(c = 0; c < columnCount-1; c+=1) {
    cols.push([]);
  }

  arr.forEach(function (e,i) {
    var c = i%columnCount;
    cols[c].push(arr[i]);
  });

  cols.map(function (e,i) {
    return cols[c].sort(function (a, b) {
      return a.otherVal - b.otherVal;
    });
  });

  for(var i = 0; i < arr.length; i+=1){
    var c = i%columnCount, l = Math.floor(i/columnCount);
    arr2.push(cols[c][l]);
  }

  return arr2;
}

...

custom_sort(data.people, 5);
函数自定义排序(\u arr,columnCount){
var cols,c,arr2,arr=_arr.sort(函数(a,b){
返回a级-b级;
});
cols=[];
对于(c=0;c
这是一种基于任意行长度的排序

// Your array here.
var arr = [
    {first: 1, second: 5},{first: 2, second: 1},{first: 3, second: 6},
    {first: 4, second: 2},{first: 5, second: 2},{first: 6, second: 3},
    {first: 7, second: 3}
];

// Your row length here.
var rowLen = 3;

//////////////////////////////////////////////////
var colLen = Math.ceil(arr.length / rowLen);


console.log("original");
showArr(arr, rowLen);

for(var curCol = 0; curCol < rowLen; curCol++)
{
    // Standard insertion sort on colums.
    for(var i = 0; i < colLen - 1; i++)
    {
        for(var j = i + 1; j < colLen; j++)
        {
            if(j * rowLen + curCol < arr.length)
            {   
                var colIdxI = i * rowLen + curCol;
                var colIdxJ = j * rowLen + curCol;
                if(comparitor(arr[colIdxI].second, arr[colIdxJ].second) == 1)
                {
                    // Swap.
                    var temp = arr[colIdxI];
                    arr[colIdxI] = arr[colIdxJ];
                    arr[colIdxJ] = temp;
                }
            }
        }
    }
}

console.log("sorted");
showArr(arr, rowLen);

function comparitor(a, b)
{
  if (a < b)
  {
    return -1;
  }
  if (a > b)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

function showArr(arr, rowLen)
{
    var set;
    for(var i = 0; i < arr.length; i++)
    {
        if(i % rowLen == 0)
        {
            console.log(set);
            set = "";
        }

        set += JSON.stringify(arr[i]) + " ";
    }

    if(arr.length % rowLen != 0)
    {
        console.log(set);
    }
}
//这里是您的数组。
var arr=[
{first:1,second:5},{first:2,second:1},{first:3,second:6},
{first:4,second:2},{first:5,second:2},{first:6,second:3},
{第一:7,第二:3}
];
//您的行长度在这里。
var rowLen=3;
//////////////////////////////////////////////////
var colLen=数学单元(arr.length/rowLen);
控制台日志(“原件”);
showArr(arr,rowLen);
for(var curCol=0;curColb)
{
返回1;
}
其他的
{
返回0;
}
}
函数showArr(arr,rowLen)
{
var集;
对于(变量i=0;i
您希望按数字水平排序。您想在垂直方向上排序什么?您能给出一个代码示例吗?如果您按数字水平和垂直排序列表,那么仅对列表进行排序就足以获得正确的顺序。这是2D数组还是需要基于任意行长度的排序?另外,垂直排序将撤消按行排序的数字。这是可以接受的,还是有一些限制以某种方式保持数字的顺序?@TobiObeck,每个名字下面有两个数字。当前网格按第一个数字排序。现在,我想按第二个数字对列进行排序。所以要清楚,这是一个两阶段排序。先按第一个数字水平排列,然后按第二个数字垂直排列?谢谢你,杰曼先生!它起作用了!没问题。如果你最终使用的是这个,你可以接受这个答案。