(有误,请勿观看)javascript
1、排名的简单实现java
//排名例子1ajax
//须要排名的数组
//var myArray = [5,7, 7, 9, 8, 6, 23];json
//新数组
//var thisArray = [];数组
//将须要排名的数组中元素存入新数组,同时存入原始索引和新索引默认为0
//for (var i = 1; i <= myArray.length; i++) {浏览器
// thisArray.push({ myValue: myArray[i - 1], oldIndex: i ,newIndex:0});
//}服务器
//将新数组按照值的大小排序
//thisArray.sort(function (a, b) {
// return b.myValue - a.myValue;
//});post
//将排序后顺序存入新索引
//for (var i = 1; i <=thisArray.length; i++) {
// thisArray[i - 1].newIndex = i;
//}性能
//再根据原始索引排序
//thisArray.sort(function (a, b) {
// return a.oldIndex - b.oldIndex;
//});this
//此时获取到的就是排序后的值了,而newIndex就是排名。
//console.log(thisArray);
//若是想单独获取排名能够遍历thisArray.newIndex 存入另外一个新的数组
//排名例子2
//var e2 = 20;
//var e3 = 10;
//var e4 = 70;
//var e5 = 20;
//var e6 = 50;
//var arrArray = [];
//for (var i = 2; i <= 6; i++) {
// arrArray.push({ e: window["e" + i], p: i });
//}
//arrArray.sort(function (a, b) {
// return b.e - a.e;
//});
//for (var i = 0; i < arrArray.length; i++) {
// window["p" + arrArray[i].p] = i + 1;
//}
//console.dir(arrArray);
//console.log(p2);
//console.log(p3);
//console.log(p4);
//console.log(p5);
//console.log(p6);
2、实际数据及效果
三 项目中实现排名列的方法
//缺点:循环过多且嵌套循环,往后数据量大幅增长时可能致使浏览器卡慢。 //优势:服务器端消耗性能很低。 //改进思路:如何减小循环次数 function myTableSort(data, yearList, regionNameList, myParam) { var mydata = data.concat(); for (var j = 0; j < yearList.length; j++) { /****************取值********************/ //参数数据 var paramData = []; //根据年份、参数获取某年某月参数数据 for (var i = 0; i < mydata.length; i++) { if (mydata[i].Year == yearList[j]) { //这里能够存入对象类型存入 参数数据、 Year和RegionName,后二者做为排序后赋值时的判断条件 paramData.push({ myValue: mydata[i][myParam], RegionName: mydata[i].RegionName, Year: mydata[i].Year }); } } /**************** 处理********************/ //对某年排名后数据 var thisArray = []; //存入值和原始索引,新索引默认为0 for (var i = 1; i <= paramData.length; i++) { thisArray.push({ myValue: paramData[i - 1].myValue, RegionName: paramData[i - 1].RegionName, Year: paramData[i - 1].Year, oldIndex: i, newIndex: 0 }); } //根据值排序, thisArray.sort(function (a, b) { return b.myValue - a.myValue; }); //存入排序后的新索引 for (var i = 1; i <= thisArray.length; i++) { thisArray[i - 1].newIndex = i; } //根据原始索引对数组排序 thisArray.sort(function (a, b) { return a.oldIndex - b.oldIndex; }); //此时新索引就是排名 //console.log(thisArray); /**************** 赋值 ********************/ //将当年排名后数据 赋值到mydata for (var i = 0; i < mydata.length; i++) { //若是年份相等 if (mydata[i].Year == yearList[j]) { //城市名称循环赋值单行 for (var k = 0; k < regionNameList.length; k++) { //若是参数值相等则赋值排名 if (mydata[i].RegionName == thisArray[k].RegionName && mydata[i].Year == thisArray[k].Year && mydata[i][myParam] == thisArray[k].myValue) { mydata[i].IndexRank = thisArray[k].newIndex; // console.log("综合指数:" + mydata[i][myParam], "排名:" + thisArray[k].newIndex); } } } } } return mydata; }
4、数据获取和前期处理:
function loadChart() { $.ajax({ url: '@Url.Action("BasicEvaluationData")', data: {}, type: "post", dataType: "json", success: function (result) { if (result != undefined && result != null && result.success == true) { var paramsList = ["UrbanEcologicalIndex", "EcologicalAssetIndex", "EcologicalLandscapeIndex", "EcologicalPressureIndex", "EcologicalConstructionIndex", "EcologicalServiceIndex"]; var regionNameList = []; var data = []; var yearList = []; for (var i = 0; i < result.rows.length; i++) { var row = result.rows[i]; var rowObj = new Object(); for (var j in row) { rowObj[j] = row[j]; } regionNameList.push(rowObj.RegionName); yearList.push(rowObj.Year); data.push(rowObj); } yearList = Distinct(yearList); regionNameList = Distinct(regionNameList); //console.dir(regionNameList); //console.dir(yearList); myTable(yearList, regionNameList, data, paramsList); myEcharts(yearList, regionNameList, data, paramsList); } } }); }