降低 if/else 语句的复杂性?

Reducing if/else statement complexity?

下面我有一个简明的if/else声明:

function () {
    if (elem.attr('data-src-1') === '' && elem.attr('data-src-2') === '') {
      // scenario a
    } else if (elem.attr('data-src-1') === '' && elem.attr('data-src-2') !== '') {
      // scenario b
    } else if (elem.attr('data-src-1') !== '' && elem.attr('data-src-2') === '') {
      // scenario c
    } else {
      // scenario d
    }
}

根据严格的 linting 规则返回复杂度 7。我需要将其复杂度降低到 6,但看不出如何使它更简洁?

这更像是一个代码审查问题,但您可以将 if 1='' 合并为 if/elses,然后对内部 if/elses 执行相同的操作。

我认为这不太可读,但它在技术上不那么复杂。

function() {
  if (elem.attr('data-src-1') === '') {
    if (elem.attr('data-src-2') === '') {
      // scenario a
    } 
    else {
      // scenario b
    }
  } else if (elem.attr('data-src-2') === '') {
    // scenario c
  } 
  else {
    // scenario d
  }
}

更具可读性(至少对我而言)

let data1 = elem.attr('data-src-1') === ''
let data2 = elem.attr('data-src-2') === ''

if (data1)
    !data2 ? console.log(" scenario a ")  : console.log(" scenario b ") 
else
    data2 ?  console.log(" scenario c ") : console.log(" scenario d ")