怎么取代这串if ?

}
export function batteryError(item) {
  let data = item.batteryDataRecord
  let code = []
  if (data.chtProt === 1) {
    code.push(1)
  }
  if (data.scProt === 1) {
    code.push(2)
  }
  if (data.docProt === 1) {
    code.push(3)
  }
  if (data.cocProt === 1) {
    code.push(4)
  }
  if (data.pvUvProt === 1) {
    code.push(5)
  }
  if (data.cvUvPro === 1) {
    code.push(6)
  }
  if (data.pvOvProt === 1) {
    code.push(7)
  }
  if (data.cvOvProt === 1) {
    code.push(8)
  }
  if (data.colFault === 1) {
    code.push(9)
  }
  if (data.dltProt === 1) {
    code.push(10)
  }
  if (data.cltProt === 1) {
    code.push(11)
  }
  if (data.dhtProt === 1) {
    code.push(12)
  }
  if (item.compartmentDataRecordVo.batSwOff === 1) {
    code.push(13)
  }
  if (item.compartmentDataRecordVo.batCommOk === 1) {
    code.push(14)
  }
  return code
}

这里的每个if里的条件都要走一遍,但不想写这么多if ,如何修改?

阅读 2.5k
4 个回答
let num = 1;

['chtProt', 'scProt', 'docProt', 'cocProt', 'pvUvProt', 'cvUvPro', 'pvOvProt', 'cvOvProt', 'colFault', 'dltProt', 'cltProt', 'dhtProt'].forEach(key => data[key] === 1 && code.push(num++));

['batSwOff', 'batCommOk'].forEach(key => item.compartmentDataRecordVo[key] === 1 && code.push(num++));
function batteryError(item) {
  let data = item.batteryDataRecord
  let code = []
  [
    data.chtProt, 
    data.scProt, 
    data.docProt, 
    data.cocProt, 
    data.pvUvProt, 
    data.cvUvPro, 
    data.pvOvProt, 
    data.cvOvProt, 
    data.colFault, 
    data.dltProt, 
    data.cltProt, 
    data.dhtProt, 
    item.compartmentDataRecordVo.batSwOff,
    item.compartmentDataRecordVo.batCommOk
  ].map((item, index) => {
    if(item === 1) {
      code.push(index + 1)
    }
  })
  return code
}

其实我还喜欢这样写。
过了半年甲方抽风说我要data.chtProt==2或者3。在中国你永远想不到甲方哪天给你提一个“个性化”需求。

为什么要换掉呢?
这样写有什么问题吗?
你确定以后不会改吗?
一般来说, 前人这么写, 大概率是觉得以后会出现 if(xxx === 1) { code.push(1); dosomething() }

推荐问题