Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | /** * @description 对象递归转`FormData`,支持递归转换 * @function objectToFormData * @param {Object} obj - 数据源对象 * @returns {FormData} 转换后的数据,格式为FormData * @author liukun <919590347@qq.com> * @example * import { objectToFormData } from '@wont/utils' * objectToFormData({a:1}) // returns 1 */ import { isNaN } from 'lodash-es' interface NestedObj { [key: string]: NestedObj | string | number | File | File[] | any } export const objectToFormData = ( obj: NestedObj, rawParentKey = '', ): FormData => { // console.log('obj :>> ', obj); const parentKey = rawParentKey const formData = new FormData() for (const key in obj) { if (Object.hasOwnProperty.call(obj, key)) { const value = obj[key] Iif ([undefined, null].includes(value) || isNaN(value)) { continue } // console.log('key,value :>> ', key, value); const propName = parentKey ? `${parentKey}[${key}]` : key Iif (value instanceof File) { formData.append(propName, value) } else Iif (typeof value === 'object' && !Array.isArray(value)) { objectToFormData(value, propName) } else Iif (Array.isArray(value)) { value.forEach((item) => { const arrayPropName = `${propName}` if (item instanceof File) { formData.append(arrayPropName, item) } else if (typeof item === 'object' && !Array.isArray(value)) { objectToFormData(item, arrayPropName) } else { formData.append(arrayPropName, item) } }) } else { formData.append(propName, value.toString()) } } } // console.log('formData :>> ', formData); return formData } |