dealServerConfig.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /**
  2. * 配置文件压缩为字符串
  3. * 支持key-string,key-number,key-Array<string/number>
  4. *
  5. */
  6. //配置示例:
  7. let testconfig =
  8. {
  9. key1: 0,
  10. key2: "111",
  11. key3: [1, 2, 3],
  12. key4: ['4', '5', '6'],
  13. key5: [
  14. {
  15. subkey1: 1,
  16. subkey2: '2',
  17. subkey3: [1, 2, 3],
  18. subkey4: ['4', '5', '6']
  19. },
  20. {
  21. subkey1: 11,
  22. subkey2: '22',
  23. subkey3: [11, 22, 33],
  24. subkey4: ['44', '55', '66']
  25. },
  26. {
  27. subkey1: 111,
  28. subkey2: '222',
  29. subkey3: [111, 222, 333],
  30. subkey4: ['444', '555', '666']
  31. }
  32. ]
  33. }
  34. var sign_arr = '?@#$%‘’';
  35. var sign_obj = '@#~^:¥£';
  36. var configNames = ['testconfig'];
  37. compress({ testconfig: testconfig });
  38. /**
  39. * 压缩服务端配置数据,测试或服务器使用,支持key-string,key-number,key-Array<string/number>
  40. * @param configs 所有配置
  41. * @returns 压缩后的数据
  42. */
  43. function compress(configs) {
  44. for (let configkey in configs) {
  45. let configdata = configs[configkey];
  46. if (configNames.indexOf(configkey) != -1) {
  47. console.log("压缩前数据:",configs);
  48. configs[configkey] = getCompresssStr(configkey, configdata);
  49. console.log("压缩后数据:",configs);
  50. }
  51. }
  52. }
  53. /**
  54. * 遍历对象,组装成字符串
  55. * @param key
  56. * @param value
  57. * @param signindex
  58. * @returns
  59. */
  60. function getCompresssStr(key, value, signindex = 0) {
  61. let props = [];
  62. if (value instanceof Array) {//数组类型压缩
  63. let str = '';
  64. for (let i = 0; i < value.length; i++) {
  65. str += getCompresssStr(key, value[i], signindex + 1) + sign_arr[signindex];
  66. }
  67. return str.slice(0, str.length - 1);
  68. }
  69. else if (value instanceof Object) {//Object类型压缩
  70. for (let i in value) {
  71. props.push({ key: i, value: getCompresssStr(i, value[i], signindex + 1) });
  72. }
  73. }
  74. else {//基础类型直接返回
  75. return value;
  76. }
  77. //对象内数据按key的字母升序排列
  78. props.sort((a, b) => {
  79. let key1 = a.key;
  80. let key2 = b.key;
  81. let len = key1.length < key2.length ? key1.length : key2.length;
  82. for (let i = 0; i < len; i++) {
  83. if (key1.charCodeAt(i) < key2.charCodeAt(i)) {
  84. return -1;
  85. }
  86. else if (key1.charCodeAt(i) > key2.charCodeAt(i)) {
  87. return 1;
  88. }
  89. }
  90. });
  91. //转换成字符串
  92. let str = '';
  93. let sign = sign_obj.charAt(signindex);
  94. for (let i = 0; i < props.length; i++) {
  95. str += props[i].value + sign;
  96. }
  97. //去掉最后一个多余的分隔符
  98. str = str.slice(0, str.length - 1);
  99. return str;
  100. }