如何排序对象项?

时间:2013-11-26 16:24:48

标签: javascript jquery

我需要使用其值对对象中的键进行排序。我尝试使用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
    }
];

3 个答案:

答案 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更复杂,因为你想先按值排序(降序)然后按键排序 - 我希望我能正确读取它。

相关问题