【问题标题】:How to sort (reverse) object of jsonparse?如何对 json 解析的对象进行排序(反向)?
【发布时间】:2012-11-14 15:18:14
【问题描述】:

我有对象{"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, 排序(-1) - 不起作用

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

考虑改用.reverse()

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

Reverse documentation

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

【讨论】:

  • reverse 不对数组进行排序。它只是将其反转。他可能想要.sort().reverse()
  • @Shmiddty:确实如此。谢谢。我将发布更新以消除歧义。
  • .sort() 不按数字排序。它恰好适用于一位数字和一个可能的减号。
  • @pimvdb: .sort() 按字母和数字排序。然而,在这种情况下,OP 表示 sort 方法已经正常运行,他只需将其反转。如果问题出在排序上,我会完全推荐一种不同的排序算法。
  • @JoelEtherton .sort 没有按数字排序...你在哪里找到这个?
【解决方案2】:

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

我将对象中的项目混合在一起并添加了一个以证明它的分类准确/完整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2017-06-05
    • 1970-01-01
    • 2017-06-07
    • 2018-02-13
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多