util.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. 'use strict';
  2. var util = require('util');
  3. exports.inherits = util.inherits;
  4. exports.isDate = util.isDate;
  5. function extractPropKey(key) {
  6. return key.split('.');
  7. }
  8. exports.getProp = function(obj, key) {
  9. if (typeof obj !== 'object') throw new TypeError('obj must be an object!');
  10. if (!key) throw new TypeError('key is required!');
  11. var token = extractPropKey(key);
  12. var result = obj[token.shift()];
  13. var len = token.length;
  14. if (!len) return result;
  15. for (var i = 0; i < len; i++) {
  16. result = result[token[i]];
  17. }
  18. return result;
  19. };
  20. exports.setProp = function(obj, key, value) {
  21. if (typeof obj !== 'object') throw new TypeError('obj must be an object!');
  22. if (!key) throw new TypeError('key is required!');
  23. var token = extractPropKey(key);
  24. var lastKey = token.pop();
  25. var len = token.length;
  26. if (!len) {
  27. obj[lastKey] = value;
  28. return;
  29. }
  30. var cursor = obj;
  31. var name;
  32. for (var i = 0; i < len; i++) {
  33. name = token[i];
  34. cursor = cursor[name] = cursor[name] || {};
  35. }
  36. cursor[lastKey] = value;
  37. };
  38. exports.delProp = function(obj, key) {
  39. if (typeof obj !== 'object') throw new TypeError('obj must be an object!');
  40. if (!key) throw new TypeError('key is required!');
  41. var token = extractPropKey(key);
  42. var lastKey = token.pop();
  43. var len = token.length;
  44. if (!len) {
  45. delete obj[lastKey];
  46. return;
  47. }
  48. var cursor = obj;
  49. var name;
  50. for (var i = 0; i < len; i++) {
  51. name = token[i];
  52. if (cursor[name]) {
  53. cursor = cursor[name];
  54. } else {
  55. return;
  56. }
  57. }
  58. delete cursor[lastKey];
  59. };
  60. exports.setGetter = function(obj, key, fn) {
  61. if (typeof obj !== 'object') throw new TypeError('obj must be an object!');
  62. if (!key) throw new TypeError('key is required!');
  63. if (typeof fn !== 'function') throw new TypeError('fn must be a function!');
  64. var token = extractPropKey(key);
  65. var lastKey = token.pop();
  66. var len = token.length;
  67. if (!len) {
  68. obj.__defineGetter__(lastKey, fn);
  69. return;
  70. }
  71. var cursor = obj;
  72. var name;
  73. for (var i = 0; i < len; i++) {
  74. name = token[i];
  75. cursor = cursor[name] = cursor[name] || {};
  76. }
  77. cursor.__defineGetter__(lastKey, fn);
  78. };
  79. exports.arr2obj = function(arr, value) {
  80. if (!Array.isArray(arr)) throw new TypeError('arr must be an array!');
  81. var obj = {};
  82. var i = arr.length;
  83. while (i--) {
  84. obj[arr[i]] = value;
  85. }
  86. return obj;
  87. };
  88. exports.reverse = function(arr) {
  89. if (!Array.isArray(arr)) throw new TypeError('arr must be an array!');
  90. var len = arr.length;
  91. var tmp;
  92. if (!len) return arr;
  93. for (var left = 0, right = len - 1; left < right; left++, right--) {
  94. tmp = arr[left];
  95. arr[left] = arr[right];
  96. arr[right] = tmp;
  97. }
  98. return arr;
  99. };
  100. function parseArgs(args) {
  101. if (typeof args !== 'string') return args;
  102. var arr = args.split(' ');
  103. var result = {};
  104. var key;
  105. for (var i = 0, len = arr.length; i < len; i++) {
  106. key = arr[i];
  107. switch (key[0]){
  108. case '+':
  109. result[key.slice(1)] = 1;
  110. break;
  111. case '-':
  112. result[key.slice(1)] = -1;
  113. break;
  114. default:
  115. result[key] = 1;
  116. }
  117. }
  118. return result;
  119. }
  120. exports.parseArgs = function(orderby, order) {
  121. var result;
  122. if (order) {
  123. result = {};
  124. result[orderby] = order;
  125. } else if (typeof orderby === 'string') {
  126. result = parseArgs(orderby);
  127. } else {
  128. result = orderby;
  129. }
  130. return result;
  131. };