javascript在对象数组中排序元素

Egi*_*idi 1 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"}]
Run Code Online (Sandbox Code Playgroud)

我需要通过"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"}]
Run Code Online (Sandbox Code Playgroud)

我的尝试:

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]);
    }
Run Code Online (Sandbox Code Playgroud)

Ric*_*ock 5

该排序方法将做的工作适合你.

此代码首先按cod_nivel,然后依次对数组进行排序cod_modelo.

条件运算符:

condition ? expr1 : expr2 
Run Code Online (Sandbox Code Playgroud)

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

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>');
Run Code Online (Sandbox Code Playgroud)