serialize.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. var staticEncodeURIComponent = require('./staticEncodeURIComponent')
  2. var each = require('./each')
  3. var isArray = require('./isArray')
  4. var isNull = require('./isNull')
  5. var isUndefined = require('./isUndefined')
  6. var isPlainObject = require('./isPlainObject')
  7. function stringifyParams (resultVal, resultKey, isArr) {
  8. var _arr
  9. var result = []
  10. each(resultVal, function (item, key) {
  11. _arr = isArray(item)
  12. if (isPlainObject(item) || _arr) {
  13. result = result.concat(stringifyParams(item, resultKey + '[' + key + ']', _arr))
  14. } else {
  15. result.push(staticEncodeURIComponent(resultKey + '[' + (isArr ? '' : key) + ']') + '=' + staticEncodeURIComponent(isNull(item) ? '' : item))
  16. }
  17. })
  18. return result
  19. }
  20. /**
  21. * 序列化查询参数
  22. *
  23. * @param {Object} query 查询参数
  24. */
  25. function serialize (query) {
  26. var _arr
  27. var params = []
  28. each(query, function (item, key) {
  29. if (!isUndefined(item)) {
  30. _arr = isArray(item)
  31. if (isPlainObject(item) || _arr) {
  32. params = params.concat(stringifyParams(item, key, _arr))
  33. } else {
  34. params.push(staticEncodeURIComponent(key) + '=' + staticEncodeURIComponent(isNull(item) ? '' : item))
  35. }
  36. }
  37. })
  38. return params.join('&').replace(/%20/g, '+')
  39. }
  40. module.exports = serialize