如何使大型的if / else语句更严格?

时间:2018-09-03 16:28:58

标签: javascript if-statement

我有如下内容:

if (value === section1) {
  runChecks(checkObject[1].value1, checkObject[1].value2, leftAlign);
} else if (value === section2) {
  runChecks(checkObject[2].value1, checkObject[2].value2, rightAlign);
} else if (value === section3) {
  runChecks(checkObject[3].value1, checkObject[3].value2, leftAlign);
} else if (value === section4) {
  runChecks(checkObject[4].value1, checkObject[4].value2, rightAlign);
} else if (value === section5) {
  runChecks(checkObject[5].value1, checkObject[5].value2, leftAlign, true);
} else if (value === section6) {
  runChecks(checkObject[6].value1, checkObject[6].value2, rightAlign);
} ...

由于存在大量预定义值,因此它的运行时间比此时间长。

checkObject示例:

  var checkObject = [{
    value1: '19.1%',
    value2: '19.1%',
  }, {
   value1: '19.1%',
    value2: '19.1%',
  }, {
   value1: '19.1%',
    value2: '19.1%',
  }, ...

我想对其进行分解以提高效率,但是鉴于传递给runChecks()的数据存在差异,我不确定如何管理它。

6 个答案:

答案 0 :(得分:2)

使用开关!

switch(value){
    case section1:
        runChecks(checkObject[1].value1, checkObject[1].value2, leftAlign);
    break
    case section2:
      runChecks(checkObject[2].value1, checkObject[2].value2, rightAlign);
    break
    ... 
}

它实际上并不比使用if / else if / else短,但看起来更干净。

答案 1 :(得分:1)

实际上,您可以只使用for循环。

创建一个包含所有节的数组对象。 (我稍后会提供真正的javascript。但这是一些半伪代码)。

   var counter = 1;
    var N = something;
    var sectionArray = {section1, section2, section3, ..., sectionN};


   for(;counter<N; counter++){

   if(value === sectionArray[counter]){
  runChecks(checkObject[counter].value1, checkObject[counter].value2, rightAlign);
break;
   }

}

答案 2 :(得分:1)

一种方法是使用循环。

let sections = ['section1', 'section2', 'section3', 'section4'];

for (let i = 0; i < sections.length; i++) {
    if (value === sections[i]) {
        runChecks(checkObject[1].value1, checkObject[1].value2, leftAlign);
    }
}

答案 3 :(得分:1)

如果找到该值,则可以将ping my_app短路使用。

some

答案 4 :(得分:0)

您不能遍历数组吗?不过,您可能需要在runChecks函数中添加所需的所有信息(我添加了mybool,因为我不确定这是从哪里来的。)

checkObject.forEach(function(value, index) {
  let alignment = index % 2 == 0 ? leftAlign : rightAlign;
  runChecks(value.value1, value.value2, alignment, value.mybool);
});

答案 5 :(得分:0)

您的代码中有太多重复的部分。我会这样。

loadData(){
 let self = this;
 let characters = firebase.firestore().collection("users");
 characters.get().then((querySnapshot) => {
 querySnapshot.forEach((doc) => {
    let document = doc.data();
    self.setState(({allChars})=>({
      allChars: [
        ...allChars,
        document
      ]        
    }))
  });
 });
}