JSP实现字典根据对象值对所有key对象进行排序
01.排序要求分析
以下是原dic字典数据,由以下数据(可见图一红圈部分)可得到共有3个大key,space1、space2、space3, 3个大key里面分别对应两个子key,jgs 和 space_time_results,要求根据dic的次子key:space_time_results 中的所有Pvalue值大小从小到大排序,其中no即为排序结果对应的大小,别的参数不变,所属关系不变,输出结果如图二。
{“space1”:{“jgs”:[],“space_time_results”:[]},“space2”:{“jgs”:[{“id”:15,“Unit”:“那邦镇”,“lei”:“医疗机构”,“E”:97.559,“N”:24.7542,"
maptype":“GCJ-02”,“ok”:1}],“space_time_results”[{“no”:1,“location_ids”:“1”,“c_id”:1,“c_r”:0,"
TimeCluster":5,“CA”:1,“uA”:0.75,“LGLRA”:0.04755394943117175,“Pvalue”:0.619,“ok”:1},{
“no”:2,“location_ids”:“1”,“c_id”:1,“c_r”:0,“TimeCluster”:6,“CA”:61,“uA”:3.98515,“LGLRA”:111.0141,“Pvalue”:1.466870377E-103,“ok”:1}]},“space3”:{“jgs”:[{“id”:15,“Unit”:“那邦镇”,“lei”:“医疗机构”,“E”:97.559,“N”:24.7542,“maptype”:“GCJ-02”,“ok”:1}],"
space_time_results":[{“no”:1,“location_ids”:“1”,“c_id”:1,“c_r”:0,“TimeCluster”:5,“CA”:1,“uA”:0.75,“LGLRA”:0.047553
94943117175,“Pvalue”:8.4670377E-106,“ok”:1},{“no”:2,“location_ids”:“1”,“c_id”:1,“c_r”:0,“TimeCluster”:6,“CA”:61,“uA”:3.984
630163304515,“LGLRA”:111.0157224293711,“Pvalue”:3.477E-103,“ok”:1}]}}
图一 dic分析图
图二 dic排序结果
02.排序完成代码分析
(1)流程图分析:
(2)代码实现
<html>
<body>
<script type="text/javascript">
dic ={"space1":{"jgs":[],"space_time_results":[]},"space2":{"jgs":[{"id":15,"Unit":"那邦镇","lei":"医疗机构","E":97.559,"N":24.7542,"maptype":"GCJ-02","ok":1}],"space_time_results":[{"no":1,"location_ids":"1","c_id":1,"c_r":0,"TimeCluster":5,"CA":1,"uA":0.75,"LGLRA":0.04755394943117175,"Pvalue":0.619,"ok":1},{
"no":2,"location_ids":"1","c_id":1,"c_r":0,"TimeCluster":6,"CA":61,"uA":3.98515,"LGLRA":111.0141,"Pvalue":1.466870377E-103,"ok":1}]},"space3":{"jgs":[{"id":15,"Unit":"那邦镇","lei":"医疗机构","E":97.559,"N":24.7542,"maptype":"GCJ-02","ok":1}],"space_time_results":[{"no":1,"location_ids":"1","c_id":1,"c_r":0,"TimeCluster":5,"CA":1,"uA":0.75,"LGLRA":0.04755394943117175,"Pvalue":8.4670377E-106,"ok":1},{"no":2,"location_ids":"1","c_id":1,"c_r":0,"TimeCluster":6,"CA":61,"uA":3.984630163304515,"LGLRA":111.0157224293711,"Pvalue":3.477E-103,"ok":1}]}};
var arr = []; //建立空数组
var arr2 = {}; //建立空字典
arr.push(dic); //将原字典数据放入数组中
// alert(JSON.stringify(arr)); 测试
for(var i=0;i<arr.length;i++){ // 排序
alert("arr[i]:"+JSON.stringify(arr[i]));
for(var key in arr[i]){ //arr[i][key]["space_time_results"] 取出子key,space_time_results
for(var j=0;j<arr[i][key]["space_time_results"].length;j++){
no = arr[i][key]["space_time_results"][j].no
arr2[key+"-"+no] = arr[i][key]["space_time_results"][j];
}
}
}
var sdic=Object.keys(arr2).sort(function(a,b){return arr2[a]["Pvalue"]-arr2[b]["Pvalue"]});
//用space_time_results中的Pvalue比较大小排序
for(ki in sdic){
var ki = parseInt(ki);
var num = ki +1;
arr2[sdic[ki]]["no"]=num;
}
document.writeln(JSON.stringify(dic));
</script>
</body>
</html>