javascript在对象数组中排序元素

时间:2015-04-10 10:14:28

标签: javascript arrays json

我有以下数组:

    [{"cod_nivel":"INC2","cod_modelo":"D"},
    {"cod_nivel":"INC2","cod_modelo":"B"},    
    {"cod_nivel":"PRIM","cod_modelo":"B"},    
    {"cod_nivel":"PRIM","cod_modelo":"D"},
    {"cod_nivel":"PRIM2","cod_modelo":"B"},    
    {"cod_nivel":"PRIM2","cod_modelo":"D"},    
    {"cod_nivel":"PRIM2","cod_modelo":"A"}]

我需要通过“cod_modelo”升序按“cod_nivel”分组来对这个对象数组进行排序。所以结果应该是:

    [{"cod_nivel":"INC2","cod_modelo":"B"},
    {"cod_nivel":"INC2","cod_modelo":"D"},    
    {"cod_nivel":"PRIM","cod_modelo":"B"},    
    {"cod_nivel":"PRIM","cod_modelo":"D"},
    {"cod_nivel":"PRIM2","cod_modelo":"A"},    
    {"cod_nivel":"PRIM2","cod_modelo":"B"},    
    {"cod_nivel":"PRIM2","cod_modelo":"D"}]

我的尝试:

var array = [{"cod_nivel":"INC2","cod_modelo":"D"},
        {"cod_nivel":"INC2","cod_modelo":"B"},    
        {"cod_nivel":"PRIM","cod_modelo":"B"},    
        {"cod_nivel":"PRIM","cod_modelo":"D"},
        {"cod_nivel":"PRIM2","cod_modelo":"B"},    
        {"cod_nivel":"PRIM2","cod_modelo":"D"},    
        {"cod_nivel":"PRIM2","cod_modelo":"A"}];
  var groups = {}; // I know i need some temp object to store the current level that is being ordered..
    for (var i = 0; i < array.length; i++) {
         groups.push(array[i]);
    }

3 个答案:

答案 0 :(得分:5)

sort 方法将为您完成工作。

此代码对数组进行排序,首先是cod_nivel,然后是cod_modelo

条件运算符:

condition ? expr1 : expr2 

...用于按键比较数组的元素。 (条件运算符通常称为&#34;三元运算符&#34;因为它是唯一需要三个操作数的JavaScript运算符。)

&#13;
&#13;
var arr= [{"cod_nivel":"INC2","cod_modelo":"D"},
          {"cod_nivel":"INC2","cod_modelo":"B"},    
          {"cod_nivel":"PRIM","cod_modelo":"B"},    
          {"cod_nivel":"PRIM","cod_modelo":"D"},
          {"cod_nivel":"PRIM2","cod_modelo":"B"},    
          {"cod_nivel":"PRIM2","cod_modelo":"D"},    
          {"cod_nivel":"PRIM2","cod_modelo":"A"}
         ];

var sorted= arr.sort(function(a, b) {
  return a.cod_nivel  > b.cod_nivel  ? 1 :
         a.cod_nivel  < b.cod_nivel  ? -1 :
         a.cod_modelo > b.cod_modelo ? 1 :
         a.cod_modelo < b.cod_modelo ? -1 :
         0;
});

document.body.innerHTML= JSON.stringify(sorted).replace(/},/g,'},<br>');
&#13;
&#13;
&#13;

答案 1 :(得分:2)

var array = [{"cod_nivel":"INC2","cod_modelo":"D"},
    {"cod_nivel":"INC2","cod_modelo":"B"},    
    {"cod_nivel":"PRIM","cod_modelo":"B"},    
    {"cod_nivel":"PRIM","cod_modelo":"D"},
    {"cod_nivel":"PRIM2","cod_modelo":"B"},    
    {"cod_nivel":"PRIM2","cod_modelo":"D"},    
    {"cod_nivel":"PRIM2","cod_modelo":"A"}];


var sortedArray = array.sort(function(a,b) {
            return (a["cod_nivel"] > b["cod_nivel"]) ? 1 : -1;
    }).sort(function(a,b) {
            if(a["cod_nivel"] == b["cod_nivel"])
                return (a["cod_modelo"] > b["cod_modelo"]) ? 1 : -1;
            else 
                return 0;
    });
console.log(sortedArray);  
  

<强> demo

答案 2 :(得分:0)

如果没有使用外部JavaScript库的限制,您可以使用 Underscore js ,此库专门用于处理javascript对象和集合。您可以采用以下示例作为解决方案

var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];

var sort = _.sortBy(stooges, 'name');
希望它有所帮助......