关于JSON的排序问题
var str = "{"张三": 85, "李四": 88, "王五": 79}"; //AJAX从后端获得的字符串,并非直接赋值
//这是一个成绩单,我一般情况下采用eval变成json对象,然后采用for in展现
jsonObj = eval( "(" + str + ")" );
for (var name int jsonObj)
{
alert(name + "考了" + jsonObj[name] + "分");
}
以上是我的应用场景,代码是我随手写的,只是表达意思而已,突然老板心血来潮,说要搞个排序,让高分的排前面。
也就是要变成:
{"李四": 88, "张三": 85, "王五": 79}
搞半天没有想到好办法,自己拆解去冒泡倒是可以,但感觉太山寨,有什么好方法么?
谢谢大家。
------解决方案--------------------<script type="text/javascript">
var str = '{"张三": 85,"李四": 88,"王五": 79}';
var jsonObj = eval( "(" + str + ")" );
var newObj={},arr=[];
for (var name in jsonObj){
arr.push(jsonObj[name]+"_"+name);
}
arr.sort(function compare(a,b){return parseInt(b)-parseInt(a)});
for(var i=0;i<arr.length;i++){
var temp=arr[i].split("_");
newObj[temp[1]]=temp[0];
}
alert(newObj);
</script>
------解决方案--------------------先转换成数组,sort()方法排序,再转换回对象
------解决方案--------------------sql里的order by是干什么的?
让后端从数据库里查的时候排序不比你传到前端来排序高效。
另外,就算要前端js来排序,你这个json格式排不了序的亲,用for in遍历obj的属性是按属性的字典序输出的,无论你怎么排都没用。要把这个json格式改成最外层是[],即array型。
var str = '[{"name":"张三","score" :85}, {"name":"李四", "score":88}, {"name":"王五","score": 79}]';
//这是一个成绩单,我一般情况下采用eval变成json对象,然后采用for in展现
jsonObj = eval( "(" + str + ")" );
jsonObj.sort(function(a,b){ return b.score - a.score;});
sort方法内部实现是快排,效率不是问题。
------解决方案--------------------