如何排序(反向)jsonparse的对象?

我有对象{"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 += '
    '; Object.keys(obj).sort(-1).forEach(function (key) { levels += '
  • ' + obj[key] + '
  • '; }); levels += '
'; return levels; }

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

考虑使用.reverse()代替。

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

反向文档

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

Array.sort方法不接受整数作为唯一可选参数。 它接受对返回-11的函数的引用,详细信息可以在这里找到: https : //developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/分类

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

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

我把对象中的项目混合在一起并添加了一个来certificate它是准确/完全排序的。