我有一个表单,其中有像name,email,other[a],other[b]这样的字段,这是由AJAX提交的.目前,在使用Axios进行发布之前准备数据的脚本执行此操作

const data = Array.from(new FormData(this.form).entries()).reduce((memo, pair) => ({
    ...memo,
    [pair[0]]: pair[1],
}), {});

它产生了

  {
     "name":"X",
     "email":"Y",
     "other[a]":"A",
     "other[b]":"B",
  }

但它必须是

  {
     "name":"X",
     "email":"Y",
     "other": {
       "a": "A",
       "b": "B"
     }
  }

我需要做什么才能使这other个字段成为一个嵌套数组?

推荐答案

要将其他字段转换为嵌套对象,可以修改数据准备过程.您需要拆分字段名并相应地构造对象.下面是一个您可以使用的函数:

function transformFormData(formData) {
  const data = {};

  for (let [key, value] of formData.entries()) {
    if (key.startsWith('other[')) {
      const nestedKey = key.substring(key.indexOf('[') + 1, key.indexOf(']'));
      if (!data['other']) {
        data['other'] = {};
      }
      data['other'][nestedKey] = value;
    } else {
      data[key] = value;
    }
  }

  return data;
}data;
}

用此函数替换您当前的数据准备流程:

const data = transformFormData(new FormData(this.form));

此函数遍历表单数据条目,并判断键是否以‘Other’开头.如果是,则提取嵌套的键(如‘a’或‘b’),并相应地构造对象.否则,它会将键-值对直接存储在主对象中.

Javascript相关问答推荐

获取加载失败:获取[.]添加时try 将文档添加到Firerestore,Nuxt 3

将数据从strapi提取到next.js,但响应延迟API URL

在Angular中将样式应用于innerHTML

Angular:动画不启动

PrivateRoute不是路由组件错误

在react JS中映射数组对象的嵌套数据

JS,当你点击卡片下方的绿色空间,而它是在它的背后转动时,

Prisma具有至少一个值的多对多关系

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

如何使用JS创建一个明暗功能按钮?

有效路径同时显示有效路径组件和不存在的路径组件

try 将Redux工具包与MUI ToggleButtonGroup组件一起使用时出错

FireBase FiRestore安全规则-嵌套对象的MapDiff

在没有任何悬停或其他触发的情况下连续交换图像

如何压缩图像并将其编码为文本?

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

为什么这个最小Angular 的Licial.dev设置不起作用?

ReactJS Sweep Line:优化SciChartJS性能,重用wasmContext进行多图表渲染

使用JAVASCRIPT-使用If和Else If多次判断条件-使用JAVASRIPT对象及其属性