这种js代码是否可以有优雅的写法

private async initData(obj: any) {
    const $this: any = this
    try {
      const ret: any = await ContrastService.evidenceContrast(obj)
      if (ret.result && ret.data && ret.data.length) {
        this.firstData = this.transeferData(ret.data[0])
        this.secondData = this.transeferData(ret.data[1])
        this.retrialData = this.transeferData(ret.data[2])
      }
    } catch (err) {
      $this._tipErr(err)
    }
  }
private transeferData(data: any) {
    const arr = []
    for (const list of data.litigentEvidenceContrastResults) {
      for (const item of list.details) {
        arr.push({
          role: list.role,
          evidenceNum: item.evidenceIndex,
          evidence0: item.regulationDetails[0].detail,
          evidence1: item.regulationDetails[1].detail,
          evidence2: item.regulationDetails[2].detail,
          evidence3: item.regulationDetails[3].detail
        })
      }
    }
    return arr
  }
阅读 1.3k
1 个回答

事先说明, 就你这数据结构,你的写法足够清晰了。

强行优雅一下

this.firstData = this.transeferData(ret.data[0])
this.secondData = this.transeferData(ret.data[1])
this.retrialData = this.transeferData(ret.data[2])

->

const arr = ['firstData', 'secondData', 'retrialData']
// 假设ret.data长度为3
ret.data.forEach((item, index) => {
  this[arr[index]] = this.transeferData(item)
})

arr.push({
  role: list.role,
  evidenceNum: item.evidenceIndex,
  evidence0: item.regulationDetails[0].detail,
  evidence1: item.regulationDetails[1].detail,
  evidence2: item.regulationDetails[2].detail,
  evidence3: item.regulationDetails[3].detail
})

->

let obj = {
  role: list.role,
  evidenceNum: item.evidenceIndex
}

item.regulationDetails.forEach((item,index) => {
  obj[`evidence${index}`] = item.detail
})

arr.push(obj)

确实感觉自己很无聊:)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题