关于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>
function createComparisonFunction(propertyName) {
return function(object1, object2) {
var value1,value2;
for(var i in object1) {
value1 = object1[i]
}
for(var i in object2) {
value2 = object2[i]
}
if(value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
};
}
var str = "{"张三": 85, "李四": 88, "王五": 79}";
var objstr = evel('(' + str + ')');
var arrstr = [];
$.each(objstr, function(i, dom) {
var obj = {};
obj[i] = dom;
arr.push(obj);
});
arrstr.sort(createComparisonFunction());
for(var i=0,j=arrobj.length; i<j; i++) {
$.extend(objstr, arrobj[i]);
}
alert(arrstr);