1

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

3 Answers 3

5

The sort method will do the work for you.

This code sorts the array, first by cod_nivel, then by 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.)

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

Sign up to request clarification or add additional context in comments.

3 Comments

methinks you need check cod_nivel first
yes, but it is not grouped by cod_nivel after ordering it by cod_modelo. It needs to be grouped by cod_nivel (they need to be one after another the objects of same cod_nivel)
Sorry, I interpreted the question as needing to be sorted by cod_modelo first. I'll update.
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

Comments

0

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. 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 ....

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.