12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // @ts-nocheck
- // #ifndef UNI-APP-X
- type UTSJSONObject = Record<string, any>
- // #endif
- /**
- * 将对象转换为URL查询字符串
- * @param data - 需要转换的键值对对象
- * @param isPrefix - 是否添加问号前缀,默认为false
- * @returns 格式化后的URL查询参数字符串
- *
- * @example
- * // 基础用法
- * obj2url({ name: '张三', age: 25 });
- * // => "name=%E5%BC%A0%E4%B8%89&age=25"
- *
- * @example
- * // 数组参数处理
- * obj2url({ tags: ['js', 'ts'] });
- * // => "tags[]=js&tags[]=ts"
- *
- * @example
- * // 包含空值的过滤
- * obj2url({ name: '', age: null, city: undefined });
- * // => ""
- *
- * @description
- * 1. 自动过滤空值(空字符串、null、undefined)
- * 2. 支持数组参数转换(自动添加[]后缀)
- * 3. 自动进行URI编码
- * 4. 支持自定义是否添加问号前缀
- */
- export function obj2url(data : UTSJSONObject, isPrefix : boolean = false) : string {
- const prefix = isPrefix ? '?' : '';
- const _result:string[] = [];
- const empty:(any|null)[] = ['', null]
- // #ifndef APP-ANDROID
- empty.push(undefined)
- // #endif
- for (const key in data) {
- const value = data[key];
- // 去掉为空的参数
- if (empty.includes(value)) {
- continue;
- }
- if (Array.isArray(value)) {
- (value as any[]).forEach((_value) => {
- _result.push(
- encodeURIComponent(key) + '[]=' + encodeURIComponent(`${_value}`),
- );
- });
- } else {
- _result.push(encodeURIComponent(key) + '=' + encodeURIComponent(`${value}`));
- }
- }
- return _result.length > 0 ? prefix + _result.join('&') : '';
- }
|