我有以下数组:
[{"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]);
}
答案 0 :(得分:5)
sort 方法将为您完成工作。
此代码对数组进行排序,首先是cod_nivel
,然后是cod_modelo
。
条件运算符:
condition ? expr1 : expr2
...用于按键比较数组的元素。 (条件运算符通常称为&#34;三元运算符&#34;因为它是唯一需要三个操作数的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>');
&#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');
希望它有所帮助......