在索引上排序多维数组?

时间:2015-06-11 13:55:10

标签: javascript jquery sorting multidimensional-array data-structures

我需要找到班级的位置。 我有多维数组,如下所示:

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,
          },
 }  

我要做的是计算班级的位置。

3 个答案:

答案 0 :(得分:0)

你所拥有的是一个对象而不是一个数组。如果你想使用一个数组看看这个

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)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

$total = count($myData);
for($a=0; $a<$total;$a++)
{
  $myData[$a]['pos'] = $a+1;
}