JavaScript数据结构,便于多维排序

时间:2012-01-05 17:49:47

标签: javascript

我有以下信息

Name, GPA 2010, GPA 2011
Adam, [2010, 3.4], [2011, 3.9]
Ben, [2010, 3.4], [2011, 3.9]
Charlie, [2010, 3.4], [2011, 3.9]

我希望能够做到以下几点:

  1. 按名称
  2. 按字母顺序排序
  3. 按2010年实现的GPA排序
  4. 按2011年实现的GPA排序
  5. 如果新用户的姓名尚未添加,则将新用户添加到列表中。
  6. 用于此类排序的最经济的JavaScript数据结构是什么?

    目前我有这个:

    var grades = { 
    'Adam':  [[2010, 3.4], [2011, 3.9]],
    'Ben' :  [[2010, 3.4], [2011, 3.9]],
    'Charlie' : [[2010, 3.4], [2011, 3.9]] };
    

    这样可以轻松实现第4点(if (name in grades === false))和reasonably easy以达到第1点,但很容易实现第2点或第3点。

1 个答案:

答案 0 :(得分:1)

考虑一下:

var grades = [ 
    { 
       'name': 'Adam', 
       '2010': 3.4,
       '2011': 3.9
    }, 
    {
       'name': 'Ben',
       '2010': 3.4,
       '2011': 3.9
    } 
];

排序:

function compareNames(a, b) {
    var nameA = a.name.toLowerCase( );
    var nameB = b.name.toLowerCase( );
    if (nameA < nameB) {return -1}
    if (nameA > nameB) {return 1}
    return 0;
}

function compareGPAs(year) {
    return function(a, b) {
        return a.year - b.year;
    }
}

// sort by name
grades.sort(compareNames);

// sort by GPA of 2010
grades.sort(compareGPAs('2010'));