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; }; |