sort.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const sortData = {
  2. result : [],
  3. type : {},
  4. parse(array , column , i) {
  5. let _this=this;
  6. let data = {};
  7. data['0']='';data['1']='';data['2']='';data['3']='';data['4']='';data['5']='';data['6']='';data['7']='';data['8']='';
  8. data['9']='';data['a']='';data['b']='';data['c']='';data['d']='';data['e']='';data['f']='';data['g']='';data['h']='';
  9. data['i']='';data['j']='';data['k']='';data['l']='';data['m']='';data['n']='';data['o']='';data['p']='';data['q']='';
  10. data['r']='';data['s']='';data['t']='';data['u']='';data['v']='';data['w']='';data['x']='';data['y']='';data['z']='';
  11. data['A']='';data['B']='';data['C']='';data['D']='';data['E']='';data['F']='';data['G']='';data['H']='';data['I']='';
  12. data['J']='';data['K']='';data['L']='';data['M']='';data['N']='';data['O']='';data['P']='';data['Q']='';data['R']='';
  13. data['S']='';data['T']='';data['U']='';data['V']='';data['W']='';data['X']='';data['Y']='';data['Z']='';
  14. array.forEach(function (obj) {
  15. if (!data[obj[column].charAt(i)]) data[obj[column].charAt(i)] = [obj];
  16. else data[obj[column].charAt(i)].push(obj);
  17. });
  18. let recursion=[];
  19. for (let key in data){
  20. if (!data[key]){
  21. delete data[key];
  22. continue;
  23. }
  24. if (data[key].length > 1){
  25. if ( !(!data[key].some(function (value, index) {
  26. return value[column] !== data[key][0][column];
  27. }))){
  28. recursion.push(key);
  29. }
  30. }
  31. }
  32. if (recursion.length > 0){
  33. i++;
  34. recursion.forEach(function (key) {
  35. data[key] = _this.parse(data[key] ,column , i);
  36. });
  37. }
  38. return data;
  39. },
  40. sort:function(array, column ,type, i=0 ) {
  41. this.result = [];
  42. this.type = type;
  43. //if (!Array.isArray(column)) column = [column];
  44. let columnName = column[0];
  45. column.splice(0,1);
  46. this.merge(this.parse(array, columnName, i), column, columnName);
  47. array.length = 0;
  48. array.push.apply(array,this.result);
  49. },
  50. merge(object, subordinate = [] ,columnName = '') {
  51. for (let key in object){
  52. if (Array.isArray(object[key])){
  53. if (object[key].length > 1 && subordinate.length > 0){
  54. let subordinateName = subordinate[0];
  55. subordinate.splice(0,1);
  56. object[key] = this.merge(this.parse(object[key], subordinateName, 0), subordinate, subordinateName);
  57. }
  58. if (this.type[columnName] === 'asc') this.result.push.apply(this.result,object[key]);
  59. else this.result.unshift.apply(this.result,object[key]);
  60. }else this.merge(object[key], [] ,columnName);
  61. }
  62. }
  63. };
  64. module.exports=sortData;