前端-嵌套对象转FormData(支持文件/对象无限层级递归)

/**
 * 嵌套对象转FormData
 * @param formData
 * @param data
 * @param parentKey
 */
const appendFormData = (formData: any, data: any, parentKey = '') => {
  for (const key in data) {

    if (Object.prototype.hasOwnProperty.call(data, key)) {
      const value = data[key];
      const fullKey = parentKey ? `${parentKey}.${key}` : key;

      if (Array.isArray(value)) {
        if (value.length > 0 && value[0] instanceof File) {
          // 如果是文件列表,文件列表需特殊处理
          value.forEach((file, index) => {
            formData.append(`${fullKey}`, file);
          });
        } else {
          value.forEach((item, index) => {
            if (typeof item === 'object' && item !== null) {
              appendFormData(formData, item, `${fullKey}[${index}]`);
            } else {
              formData.append(`${fullKey}[${index}]`, item); // 将数组值作为对象属性值直接添加到 FormData 中
            }
          });
        }
      } else if (typeof value === 'object' && value !== null) {
        if (value instanceof File) {
          formData.append(fullKey, value);
        } else {
          appendFormData(formData, value, fullKey);
        }
      } else {
        if (value != undefined && value != null) {
          formData.append(fullKey, value);
        }
      }
    }
  }
};

相关推荐

  1. FormData 对象

    2024-04-22 00:30:07       28 阅读
  2. 生成对象

    2024-04-22 00:30:07       28 阅读
  3. Vue项目里实现json对象formData数据

    2024-04-22 00:30:07       58 阅读
  4. 前端常见应用

    2024-04-22 00:30:07       32 阅读
  5. LUA 对象excel

    2024-04-22 00:30:07       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 00:30:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 00:30:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 00:30:07       87 阅读
  4. Python语言-面向对象

    2024-04-22 00:30:07       96 阅读

热门阅读

  1. 深入浅出理解CSS中的3D变换:踏上立体视觉之旅

    2024-04-22 00:30:07       36 阅读
  2. k8s中修复mongodb启动失败

    2024-04-22 00:30:07       24 阅读
  3. Neural Radiance Fields (NeRF) 和 3D Gaussian Splatting区别

    2024-04-22 00:30:07       34 阅读
  4. 展开说说:Android Fragment完全解析-卷二

    2024-04-22 00:30:07       39 阅读
  5. vue大屏

    2024-04-22 00:30:07       32 阅读
  6. jQuery 选择器有几种,分别是什么

    2024-04-22 00:30:07       34 阅读
  7. Linux系统的账号和权限管理

    2024-04-22 00:30:07       36 阅读
  8. 赠品:跳动的心

    2024-04-22 00:30:07       36 阅读
  9. ZYNQ-700呼吸灯

    2024-04-22 00:30:07       36 阅读
  10. 【设计模式】8、adapter 适配器模式

    2024-04-22 00:30:07       32 阅读
  11. 考古:MFC界面的自适应缩放(代码示例)

    2024-04-22 00:30:07       37 阅读