url.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * @preserve jquery-param (c) 2015 KNOWLEDGECODE | MIT
  3. */
  4. export function toUrlParams(a) {
  5. let s = [];
  6. let rbracket = /\[\]$/;
  7. let isArray = function(obj) {
  8. return Object.prototype.toString.call(obj) === '[object Array]';
  9. };
  10. let add = function(k, v) {
  11. v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;
  12. s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);
  13. };
  14. let buildParams = function(prefix, obj) {
  15. var i, len, key;
  16. if (prefix) {
  17. if (isArray(obj)) {
  18. for (i = 0, len = obj.length; i < len; i++) {
  19. if (rbracket.test(prefix)) {
  20. add(prefix, obj[i]);
  21. } else {
  22. buildParams(prefix, obj[i]);
  23. }
  24. }
  25. } else if (obj && String(obj) === '[object Object]') {
  26. for (key in obj) {
  27. buildParams(prefix + '[' + key + ']', obj[key]);
  28. }
  29. } else {
  30. add(prefix, obj);
  31. }
  32. } else if (isArray(obj)) {
  33. for (i = 0, len = obj.length; i < len; i++) {
  34. add(obj[i].name, obj[i].value);
  35. }
  36. } else {
  37. for (key in obj) {
  38. buildParams(key, obj[key]);
  39. }
  40. }
  41. return s;
  42. };
  43. return buildParams('', a)
  44. .join('&')
  45. .replace(/%20/g, '+');
  46. }