【问题标题】:Sort Multi Dimensional Array on Index?按索引对多维数组进行排序?
【发布时间】:2015-08-27 06:29:44
【问题描述】:

我需要找到班级的职位。 我有下面的多维数组:

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

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

【问题讨论】:

  • 第 1 步:使用数组。您的代码中根本没有数组,一维或多维。这些是非数组对象。
  • 第 2 步:向我们展示您尝试过的内容以及您不了解的内容。

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


【解决方案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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      $total = count($myData);
      for($a=0; $a<$total;$a++)
      {
        $myData[$a]['pos'] = $a+1;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 2015-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-15
        相关资源
        最近更新 更多