如何对json解析的对象进行排序(反向)?

时间:2012-11-14 15:18:15

标签: javascript jquery json

我有对象{"5":"5","4":"4","3":"3","2":"2","1":"1","-1":"P1",-2":"P2"} 并使用此函数来解析元素:

function floormake(inobj) {
    var levels = '';
    var obj = JSON.parse(inobj);
    levels += '<ul>';
    Object.keys(obj).sort(-1).forEach(function (key) {
        levels += '<li>' + obj[key] + '</li>';
    });
    levels += '</ul>';
    return levels;
}

但结果总是按数字排序:-1,-2,1,2等。但我需要反向排序:5,4,3,2,1, sort(-1) - 不起作用

2 个答案:

答案 0 :(得分:10)

请考虑使用.reverse()

Object.keys(obj).sort().reverse().forEach( ....

Reverse documentation

编辑注意:正如@Shmiddty所提到的,reverse()方法实际上并没有排序。数组需要排序然后反转。

答案 1 :(得分:5)

Array.sort方法不接受整数作为唯一可选参数。它接受对返回-101的函数的引用,详情可在此处找到:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort

以下是基于数字排序的示例:

http://jsfiddle.net/3HFN5/1/

var a = ["5", "9", "1", "399", "23", "21"];

function sorter(b, c) {
    return (+b < +c ? 1 : -1);
}

alert(a.sort(sorter));

或更简单/更好的事情:

http://jsfiddle.net/3HFN5/2/

var a = ["5", "9", "1", "399", "23", "21"];

function sorter(b, c) {
    return c - b;
}

alert(a.sort(sorter));

并将其与您的实际例子相结合:

http://jsfiddle.net/3HFN5/3/

var a = {"2":"2","4":"4","-2":"P2","3":"3","300":"4","1":"1","5":"5","-1":"P1"};

function sorter(b, c) {
    return c - b;
}

alert(Object.keys(a).sort(sorter));

我将对象中的项目混合在一起并添加一个以证明它正确/完全排序。