对索引上的多维数组进行排序

Sort Multi Dimensional Array on Index?

本文关键字:数组 排序 索引      更新时间:2023-09-26

我需要找到类的位置。我有以下多维数组:

var myData = {
      0 : {
           stdid : 1,
           marks : 98,
           pos   : ,
          },
      1 : {
          stdid : 2,
           marks : 90,
           pos   : ,
          },
      2 : {
           stdid : 3,
           marks : 77
           pos   : ,
            },
      3 : {
           stdid : 4,
           marks : 98,
           pos   : ,
          },
      4 : {
           stdid : 5,
           marks : 66,
           pos   : ,
          },
 }

我需要这个数组来填充每个索引的位置,如下所示

var myPositionData = {
      0 : {
           stdid : 1,
           marks : 98,
           pos   : 1,
          },
      1 : {
           stdid : 2,
           marks : 90,
           pos   : 2,
          },
      2 : {
           stdid : 3,
           marks : 77
           pos   : 3,
            },
      3 : {
           stdid : 4,
           marks : 98,
           pos   : 1,
          },
      4 : {
           stdid : 5,
           marks : 66,
           pos   : 4,
          },
 }  

我想做的是计算阶级的位置。

这里非常简单的解决方案。只需迭代数组并直接添加位置键即可。

for(var key in myData) {
  if(myData.hasOwnProperty(key)) {
    myData[key].pos = key+1;
  }
}

你那里有一个对象而不是数组。如果你想使用一个数组,看看这个

var myPositionData = [{
    stdid: 1,
    marks: 98,
}, {
    stdid: 2,
    marks: 90,
}, {
    stdid: 3,
    marks: 77,
}, {
    stdid: 4,
    marks: 98,
}, {
    stdid: 5,
    marks: 66,
}]
function compare(a, b) {
    if (a.marks < b.marks) return 1;
    if (a.marks > b.marks) return -1;
    return 0;
}
myPositionData.sort(compare);
var currentPositions = 1;
for (var i = 0; i < myPositionData.length; i++) {
    myPositionData[i].pos = currentPositions;
    if (!(i < myPositionData.length - 2 && compare(myPositionData[i], myPositionData[i + 1]) == 0)) {
        currentPositions++;
    }
}
console.log(myPositionData)
$total = count($myData);
for($a=0; $a<$total;$a++)
{
  $myData[$a]['pos'] = $a+1;
}