简体   繁体   English

对象数组中的javascript排序元素

[英]javascript ordering elements in array of objects

I have the following 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"}]

I need to order this array of objects by "cod_modelo" ascending grouped by "cod_nivel". 我需要按“ cod_nivel”分组的“ cod_modelo”升序对对象数组进行排序。 So the result should be: 因此结果应为:

    [{"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"}]

My attemp: 我的尝试:

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]);
    }

The sort method will do the work for you. sort方法将为您完成工作。

This code sorts the array, first by cod_nivel , then by cod_modelo . 此代码首先通过cod_nivel然后通过cod_modelo对数组进行cod_modelo

The conditional operator: 条件运算符:

condition ? expr1 : expr2 

… is used to compare the array's elements by key. …用于按键比较数组的元素。 (The conditional operator is often called the "ternary operator" because it's the only JavaScript operator that takes three operands.) (条件运算符通常被称为“三元运算符”,因为它是唯一需要三个操作数的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>'); 

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 演示

If there is no restriction of using a external javascript library, you can use Underscore js , this library is specifically designed for working with javascript objects and collections. 如果没有使用外部javascript库的限制,则可以使用Underscore js ,该库专门用于处理javascript对象和集合。 you can take the following example for the solution 您可以将以下示例用于解决方案

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

var sort = _.sortBy(stooges, 'name');

hope it helps .... 希望能帮助到你 ....

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM