queryParams.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /**
  2. * 对象转url参数
  3. * @param {*} data,对象
  4. * @param {*} isPrefix,是否自动加上"?"
  5. * 此函数参考uView
  6. */
  7. function queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {
  8. let newData = JSON.parse(JSON.stringify(data));
  9. let prefix = isPrefix ? '?' : ''
  10. let _result = []
  11. if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets';
  12. for (let key in newData) {
  13. let value = newData[key]
  14. // 去掉为空的参数
  15. if (['', undefined, null].indexOf(value) >= 0) {
  16. continue;
  17. }
  18. // 如果值为数组,另行处理
  19. if (value.constructor === Array) {
  20. // e.g. {ids: [1, 2, 3]}
  21. switch (arrayFormat) {
  22. case 'indices':
  23. // 结果: ids[0]=1&ids[1]=2&ids[2]=3
  24. for (let i = 0; i < value.length; i++) {
  25. _result.push(key + '[' + i + ']=' + value[i])
  26. }
  27. break;
  28. case 'brackets':
  29. // 结果: ids[]=1&ids[]=2&ids[]=3
  30. value.forEach(_value => {
  31. _result.push(key + '[]=' + _value)
  32. })
  33. break;
  34. case 'repeat':
  35. // 结果: ids=1&ids=2&ids=3
  36. value.forEach(_value => {
  37. _result.push(key + '=' + _value)
  38. })
  39. break;
  40. case 'comma':
  41. // 结果: ids=1,2,3
  42. let commaStr = "";
  43. value.forEach(_value => {
  44. commaStr += (commaStr ? "," : "") + _value;
  45. })
  46. _result.push(key + '=' + commaStr)
  47. break;
  48. default:
  49. value.forEach(_value => {
  50. _result.push(key + '[]=' + _value)
  51. })
  52. }
  53. } else {
  54. _result.push(key + '=' + value)
  55. }
  56. }
  57. return _result.length ? prefix + _result.join('&') : ''
  58. }
  59. export default queryParams;