数组取值优化

新手上路,请多包涵

addForm:{

    interval: '', // sort = 1 对应赋值
    platformratio: '', // sort = 2 
    proporsite: '',// sort = 3
    proporproject: '',// sort = 4
    proporroad: '', // sort = 5
    propordrawn: '', // sort = 6
    proportime: ''// sort = 8

}

现有一个数组
const aa = [

    {
      paramName: 'cc',
      paramValue: '10',
      sort: 1
    },
    {
      paramName: 'dd',
      paramValue: '20',
      sort: 2
    },
    {
      paramName: 'ee',
      paramValue: '30',
      sort: 3
    },
    {
      paramName: 'ff',
      paramValue: '40',
      sort: 4
    },
    {
      paramName: 'gg',
      paramValue: '50',
      sort: 5
    },
    {
      paramName: 'hh',
      paramValue: '60',
      sort: 6
    }, {
      paramName: 'ii',
      paramValue: '80',
      sort: 8
    }
  ]

我是根据sort值不同进行赋值的

aa.forEach(v => {
    if (v.sort === 1) {
     addForm.interval = v.paramValue
    } else if (v.sort === 2) {
      addForm.platformratio = v.paramValue
    } else if (v.sort === 3) {
      addForm.proporsite = v.paramValue
    } else if (v.sort === 4) {
      addForm.proporproject = v.paramValue
    } else if (v.sort === 5) {
      addForm.proporroad = v.paramValue
    } else if (v.sort === 6) {
      addForm.propordrawn = v.paramValue
    } else if (v.sort === 8) {
      addForm.proportime = v.paramValue
    }
  })

我想问一下还能怎么优化代码

阅读 2k
3 个回答

考虑维护一个映射表,用ts的话,可直接用枚举enum.

比如,一个映射对象:

const mapSort = { 1: 'interval', ..., 8: 'proportime' };
...
aa.forEach(v => {
    addForm[mapSort[v.sort]] = v.paramValue;
    // 当然,看业务情况,也可以先判断 mapSort[v.sort] 是否存在
});

看看这样行不行;

const addForm = {};
aa.forEach(v => {
    addForm [[
        undefined,
        'interval',
        'platformratio',
        'proporsite',
        'proporproject',
        'proporroad',
        'propordrawn',
        undefined,
        'proportime'
    ][v.sort]] = v.paramValue;
})

console.log( addForm );

发现sortaddForm属性的顺序有一定联系, 不难写出:

  const arr = Object.keys(this.addForm);
    this.aa.forEach((val) => {
      this.addForm[arr[val.sort - 1]] = val.paramValue;
    });
    console.log(this.addForm);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题