JavaScript:对每列中的项目进行排序
我有一个按数字排序的数组列表,它按行显示X个项目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,
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,每个名字下面有两个数字。当前网格按第一个数字排序。现在,我想按第二个数字对列进行排序。所以要清楚,这是一个两阶段排序。先按第一个数字水平排列,然后按第二个数字垂直排列?谢谢你,杰曼先生!它起作用了!没问题。如果你最终使用的是这个,你可以接受这个答案。