[关闭]
@a5635268 2016-03-29T13:06:27.000000Z 字数 1259 阅读 978

js的数据处理记录

javaScript 算法


mongoDB的mapReduce返回的数据有可能会非常之多,所以单独拎出来先在浏览器里面玩一玩;

  1. // 数据源
  2. var arr = [
  3. {"address": "四川汶川", "count": 1, "value": 1.5},
  4. {"address": "云南玉龙", "count": 20, "value": 2.2},
  5. {"address": "四川自贡", "count": 2, "value": 1.4},
  6. {"address": "四川木里", "count": 1, "value": 1.7},
  7. {"address": "甘肃天祝", "count": 4, "value": 1.8},
  8. {"address": "云南玉龙", "count": 30, "value": 2.1},
  9. {"address": "四川木里", "count": 100, "value": 1.1},
  10. {"address": "云南鲁甸", "count": 2, "value": 1.3},
  11. {"address": "云南玉龙", "count": 1, "value": 2.2},
  12. ];
  13. // 目标结构,count求和,并归类value,以及按照count排序;
  14. {'四川木里':{count:2,value:[1.1,1.7]},'云南玉龙':{count:100,value[1.2,1.8]}}
  15. var arr2 = [];
  16. for(var i=0 ; i<arr.length; i++){
  17. var add = arr[i]['address']; //获取当前的地区
  18. var arrCur = [arr[i]]; //新建一个临时的数组,作为待比较源;
  19. //把所有同一个城市的数据放到.临时数组里
  20. for(var j=i+1 ; j<arr.length ; j++){
  21. if(arr[j]['address'] == add){
  22. arrCur.push(arr[j]);
  23. arr.splice(j,1); //每放进一个则删除一个,目的是为了在外层循环的时候去重
  24. j--; //如果删除了,指针再回退一个
  25. }
  26. }
  27. var obj = {},
  28. count = 0,
  29. value = [];
  30. for(var k = 0 ; k<arrCur.length ; k++){
  31. count += arrCur[k]['count'];
  32. //这里对value再进行一次去重,没有的才push进去
  33. if (value.indexOf(arrCur[k]['value'])== "-1" ){ //es5新方法;
  34. value.push(arrCur[k]['value'])
  35. }
  36. }
  37. obj[add] = {
  38. count: count,
  39. value: value
  40. };
  41. obj['count'] = count; //为了方便后续用sort排序,这里做一个冗余;
  42. arr2.push(obj)
  43. }
  44. //排序
  45. arr2.sort(function(a,b){
  46. return a.count - b.count
  47. });
  48. for(var i=0; i<arr2.length;i++){ //删除掉冗余..;
  49. delete arr2[i].count;
  50. }
  51. console.log(arr2)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注