我需要使用其值对对象中的键进行排序。我尝试使用javascript的排序方法,但还没弄清楚。我的对象看起来像:
var myJson = [
{
"4": 3,
"5": 3,
"14": 3,
"18": 3,
"20": 1,
"23": 3,
"25": 3,
"33": 3,
"36": 3
}
];
我需要按顺序对名称,密钥对进行排序,以便命令:
var myJson = [
{
"4": 3,
"5": 3,
"14": 3,
"18": 3,
"23": 3,
"25": 3,
"33": 3,
"36": 3,
"20": 1
}
];
答案 0 :(得分:1)
假设您要按排序顺序从对象中检索元素。您可以从对象获取密钥并对密钥进行排序并从对象中检索值。见下文,
var keys = [];
for(var k in obj) keys.push(k);
keys.sort();
for (var i = 0; i < keys.length; i++) {
console.log(obj[key]);
}
答案 1 :(得分:0)
正如已经指出的,对象没有订单。因此,您必须更改对象结构以允许排序,如下所示:
var myJson = [
{ "itemA" : { "value1": "4", "value2" : 3 } },
{ "itemB" : { "value1": "5", "value2" : 3 } },
{ "itemC" : { "value1": "14", "value2" : 3 } },
{ "itemD" : { "value1": "18", "value2" : 3 } }
];
现在您有一个对象数组,可以通过自定义排序函数按任何值进行排序。
myJson.sort(function(a,b) {
if (a.value2 == b.value2) {
return parseInt(a.value1,10) - parseInt(b.value1,10);
}
return a.value2 - b.value2;
});
当然,上述函数仅在value2
中的值为整数且value1
中的值为整数的字符串表示时才有效...但您明白了。
答案 2 :(得分:0)
如前所述,您无法对对象进行排序,但您可以按正确的顺序(在数组中)获取这些值。您可以按顺序运行数组,然后拉动键或拉取值或任何您需要的值。
以下脚本从myJson
数组中取出第一个对象并构建一个新的数组数组,其中每个条目都是[key,value]
// pull the hash out of the array
var j = myJson[0]; // first element is the hash
// for each hash entry, build an array pair
var as_array = []
for(k in j) {
as_array.push([parseInt(k,10), j[k]]);
}
// sort first by value desc, then by key asc
var sorter = function(a,b) { return (a[1] < b[1]) && (b[0] > a[0]); }
var sorted = as_array.sort(sorter)
// show the results
sorted.forEach(function(el) { console.log(el); }
我也注意到排序似乎比.sort
更复杂,因为你想先按值排序(降序)然后按键排序 - 我希望我能正确读取它。