util-helpers
Version:
66 lines (65 loc) • 2.5 kB
TypeScript
interface TransformObjectValue {
<V, R>(arr: V[], fn: (value: V, index: number) => R, deep: false): R[];
<V, R>(arr: V[], fn: (value: any, index: number) => R, deep?: boolean): R[];
<T extends object, R>(obj: T, fn: (value: T[keyof T], key: keyof T) => R, deep: false): Record<keyof T, R>;
<T extends object, R>(obj: T, fn: (value: T[keyof T] extends object ? any : T[keyof T], key: T[keyof T] extends object ? any : keyof T) => R, deep?: boolean): Record<keyof T, R>;
<T>(obj: T, fn: (...args: any[]) => any): T;
}
/**
* 创建一个转换值的新对象或数组。
*
* 例如 antd Form 中的设置表单值时,如果值为空字符串可能需要转为 `undefined` ,才不影响表单的初始值。
*
* @alias module:Processor.transformObjectValue
* @since 4.23.0
* @param {Array | Object} data 要转换值的普通对象或数组
* @param {Function} fn 遍历普通对象或数组键值方法
* @param {boolean} [deep=true] 深度遍历,检测值为普通对象或数组时递归处理。默认`true`
* @returns {Array | Object} 如果是普通对象或数组,返回一个新的对象或数组,否则返回自身
* @example
*
* const data1 = { foo: 'bar', baz: 42 }
* // 数字转为字符串
* transformObjectValue(data1, value => {
* if(typeof value === 'number'){
* return String(value)
* }
* return value;
* });
* // { foo: 'bar', baz: '42' }
*
* const data2 = [1,2,3,4];
* // 数字转为字符串
* transformObjectValue(data2, value=>{
* if(typeof value === 'number'){
* return String(value)
* }
* });
* // ['1', '2', '3', '4']
*
* // 嵌套普通对象或数组
* const data3 = { foo: 'bar', baz: 42, c: [1,2,3,4], d: '' }
* // 数字转为字符串,空字符串转为undefined
* transformObjectValue(data3, value=>{
* if(typeof value === 'number'){
* return String(value);
* }
* retrun value === '' ? undefined : value
* });
* // { foo: 'bar', baz: '42', ['1', '2', '3', '4'], d: undefined }
*
* // 数组的值不处理,对象值为数字转为字符串,空字符串转为undefined
* transformObjectValue(data3, (value, key)=>{
* if(typeof key === 'number'){
* return value;
* }
* if(typeof value === 'number'){
* return String(value);
* }
* retrun value === '' ? undefined : value
* });
* // { foo: 'bar', baz: '42', [1, 2, 3, 4], d: undefined }
*
*/
declare const transformObjectValue: TransformObjectValue;
export default transformObjectValue;