【问题标题】:How to destructing the array of object based on property name need to map the value如何根据属性名称破坏对象数组需要映射值
【发布时间】:2020-08-04 11:22:47
【问题描述】:

我有以下指定的服务器响应格式,我需要将基于字段名的值映射到表单控件名称。

let userForm= ths.formbuilder.group({
firstName:[],
lastName:[],userName:[],
});

我需要从服务中解构以下响应,

这里我得到了基于属性的确切值,但我需要为每个属性做

let firstName= this.form.find(
  items=>   items.fieldName === 'firstName').fieldValue

 let  getUserName = this.form.find(items=>items.userName ==='userName').value


  console.log(firstName,getUserName,'test');

}

服务响应需要根据字段名映射到表单控制模型。

   form:any =[
      {
          fieldName: 'firstName',
          fieldValue: 'johns smith',
          isVisible: true,
          isValidationEnabled: true
      },
      {
          fieldName: 'userName',
          fieldValue: 'admins',
          isVisible: true,
          isValidationEnabled: true
      },
      {
          fieldName: 'documentType',
          fieldValue: 'Invoice',
          isVisible: true,
          isValidationEnabled: true
      }
  ];

谁能提供更好的解决方案

【问题讨论】:

    标签: javascript angular typescript ecmascript-6 es6-class


    【解决方案1】:

    只写一个函数将其转换为对象?

    function formArrayToObject(formArray: {fieldName: string, fieldValue: string}[]) {
      return formArray.reduce((acc, val) => {
        return Object.assign(acc, {[val.fieldName]: val.fieldValue});
      }, {});
    }
    

    在您的数组上调用它,您将拥有一个可以根据需要访问的键值对象。或者您可以根据需要致电resetsetValuepatchValue

    this.userForm.reset(formArrayToObject(this.form))
    

    【讨论】:

    • 当补丁值带有表单时,它显示 [object,object],`this.myForm.patchValue({ firstName:this.formArrayToObject(this.form.firstName) })`它显示未定义的附加错误以上
    • 它与您尝试使用它的方式不同。获取特定值是一个不同的功能..您必须按照我展示的方式使用它...
    • 对不起,我做错了。与您的解决方案一起使用是否有任何其他最短的方法来映射来自服务器的字段名称响应以将字段值分配给声明的表单控件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2021-12-03
    • 2023-03-08
    • 2021-08-28
    • 1970-01-01
    • 2019-07-13
    • 2020-08-01
    相关资源
    最近更新 更多