Arrays Typescript:使用嵌套的级别、键和值作为变量创建对象

Arrays Typescript:使用嵌套的级别、键和值作为变量创建对象,arrays,reactjs,typescript,object,nested,Arrays,Reactjs,Typescript,Object,Nested,我的react表单的每个字段组件都有一个对象数组,我想用表单值将其编译成一个对象 接口FormProps{ 名称:字符串; 子名称?:字符串; 值:未定义的|字符串|数字|布尔值; } 接口数据支柱{ 用户:ProfileProps; 朋友:未定义的| ProfileProps; 电话:未定义|号码; car:布尔型; } 界面配置文件道具{ 名字:字符串; 年龄:未定义|数字; 性别:'男'|'女'; } const getDatas=(表单:FormProps[])=>{ 常量数据={};

我的react表单的每个字段组件都有一个对象数组,我想用表单值将其编译成一个对象

接口FormProps{
名称:字符串;
子名称?:字符串;
值:未定义的|字符串|数字|布尔值;
}
接口数据支柱{
用户:ProfileProps;
朋友:未定义的| ProfileProps;
电话:未定义|号码;
car:布尔型;
}
界面配置文件道具{
名字:字符串;
年龄:未定义|数字;
性别:'男'|'女';
}
const getDatas=(表单:FormProps[])=>{
常量数据={};
//for(形式常数){
// }
将数据作为DatasProps返回;
};
const form:FormProps[]=[
{
名称:“用户”,
子名称:“名字”,
值:“Marc”,
},
{
名称:“用户”,
子名称:“年龄”,
数值:32,
},
{
名称:“用户”,
子名称:“性别”,
值:'男性',
},
{
姓名:'朋友',
子名称:“名字”,
价值观:“弗兰克”,
},
{
姓名:'朋友',
子名称:“性别”,
值:'男性',
},
{
名称:“汽车”,
值:false,
},
];
log(getDatas(form));
此处的预期结果,对于
getDatas(form)

{
用户:{
名字:'马克',
年龄:32岁,
性别:'男性'
},
朋友:{
名字:“弗兰克”,
性别:'男性'
},
电话:未定义,
汽车:假的
}
我需要自动执行此操作,因为
dataprops
FormProps
ProfileProps
取决于
FormProps
)可以更改

我希望能够将
getDatas
应用到任何具有一个嵌套级别的表单,如
FormProps
中所示:

  • name
    as
    key
    在循环中:
    array[key]
  • subName
    as
    subKey
    array[key][subKey]
您需要像这样安装阵列:

const getDatas = (form: FormProps[]): DatasProps=> {
  const datas = form.reduce((acc, field) => {
       if (!field.subName) {
           datas[field.name] = field.value
           continue;
       }

      if (!acc[field.name]) {
        acc[field.name] = {}
      }

      acc[field.name][field.subName] = field.value
      return acc
  }, {})
  
  return datas as DatasProps
};
或者使用for循环:

const getDatas = (form: FormProps[]): DatasProps=> {
    const datas = {};
    for (const field of form) {
      if (!field.subName) {
        datas[field.name] = field.value
        continue;
      }

      if (!datas[field.name]) {
        datas[field.name] = {}
      }

      datas[field.name][field.subName] = field.value
    }
  
    return datas as DatasProps
};