SmartParks_visitore/uni_modules/lime-shared/obj2url/index.ts
2025-08-21 11:23:54 +08:00

61 lines
1.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// @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('&') : '';
}