2012-01-05 26 views
0

我有以下信息:按名称 的JavaScript数据结构,便于多维排序

  • 排序

    1. 按字母顺序排序:

      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] 
      

      我希望能够做到以下由2010年实现的GPA

    2. 按2011年实现的GPA排序
    3. 将新用户添加到列表中,如果他们的名字尚未在列表中。

    什么是最经济的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

    考虑:

    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'));