能不能帮忙把 for循环中的代码优化一下?

if(this.state.dataPercentage != null && this.state.dataPercentage != '')
        {
            var dataPercentage = this.state.dataPercentage;

            var positiveInt = /^[0-9]*[1-9][0-9]*$/; //正整数
            // str为你要判断的字符
            var dataPercentageStr= dataPercentage.toString();

            var percentageDecimals = 1;
            if( positiveInt.test(dataPercentageStr) ){
                //console.log('正整数')
            } else {
                //console.log('不是正整数=='+ dataPercentageStr)

                var dataPercentageStrB   = dataPercentageStr.split(".");
                percentageDecimals = dataPercentageStrB[1]; // 获取小数部分
            }

            if(dataPercentage.toString().indexOf('.')>-1){ // 小数
                dataPercentage = parseInt(dataPercentage)+1
            }

            if(dataPercentage%4 == 0){
                //for( var ir =1; ir<6; ir++) //上面画1个 这里画5个 总共画6个
                var a1 = numberTotal-this.state.dataPercentage/4;
                console.log('总共画=='+ a1)
                for( var ir=1; ir<numberTotal-this.state.dataPercentage/4; ir++)
                {
                    pathRoute += ' M'+startX+' '+6*ir;
                    pathRoute += ' L'+endX+' '+6*ir;
                    pathRoute += ' L'+endX+' '+(4+6*ir);
                    pathRoute += ' L'+startX+' '+(4+6*ir);
                    pathRoute += ' Z';
                }

                for( var irb =numberTotal-this.state.dataPercentage/4; irb<numberTotal; irb++)
                {
                    pathRouteBlue += ' M'+startX+' '+6*irb;
                    pathRouteBlue += ' L'+endX+' '+6*irb;
                    pathRouteBlue += ' L'+endX+' '+(4+6*irb);
                    pathRouteBlue += ' L'+startX+' '+(4+6*irb);
                    pathRouteBlue += ' Z';
                }
            } else {

                var Redundancy4 = Math.ceil(this.state.dataPercentage/4) // 向上取整,有小数就整数部分加1
                console.log('Redundancy4==' +Redundancy4)
                var nd = numberTotal - Redundancy4;

                console.log('nd4=='+ nd)

                for( var ir=1; ir < nd; ir++)
                {
                    pathRoute += ' M'+startX+' '+6*ir;
                    pathRoute += ' L'+endX+' '+6*ir;
                    pathRoute += ' L'+endX+' '+(4+6*ir);
                    pathRoute += ' L'+startX+' '+(4+6*ir);
                    pathRoute += ' Z';
                }

                console.log('percentageDecimals=='+percentageDecimals)
            
            }
        }
阅读 2k
2 个回答
// 把重复的抽离出来
 function add(who, num) {
    who += ' M' + startX + ' ' + 6 * num
    who += ' L' + endX + ' ' + 6 * num
    who += ' L' + endX + ' ' + (4 + 6 * num)
    who += ' L' + startX + ' ' + (4 + 6 * num)
    who += ' Z'
    return who
  }
// 换成下面的

  if (dataPercentage % 4 == 0) {
    //for( var ir =1; ir<6; ir++) //上面画1个 这里画5个 总共画6个
    var a1 = numberTotal - this.state.dataPercentage / 4
    console.log('总共画==' + a1)

    for (var ir = 1; ir < numberTotal - this.state.dataPercentage / 4; ir++) {
      pathRoute = add(pathRoute, ir)
    }

    for (var irb = numberTotal - this.state.dataPercentage / 4; irb < numberTotal; irb++) {
      pathRouteBlue = add(pathRoute, irb)
    }
  } else {
    var Redundancy4 = Math.ceil(this.state.dataPercentage / 4) // 向上取整,有小数就整数部分加1
    console.log('Redundancy4==' + Redundancy4)
    var nd = numberTotal - Redundancy4

    console.log('nd4==' + nd)

    for (var ir = 1; ir < nd; ir++) {
      pathRoute = add(pathRoute, ir)
    }

    console.log('percentageDecimals==' + percentageDecimals)
  }
}

希望没看走眼你的代码。。太多了没仔细看

我看你几个for循环的格式都是一样的应该可以抽出来,而且变量的关键字最好用let吧看着舒服

/**
 * 
 * initValue  for循环的初始值
 * forArrayLength   要循环的那个数组的长度
 * finalString   最后生成的字符串
 */
function handleFor(initValue, forArrayLength, finalString) {
    for(let i = initValue; i < forArrayLength; i++) {
        finalString+= ' M'+startX+' '+6*i;
        finalString+= ' L'+endX+' '+6*i;
        finalString+= ' L'+endX+' '+(4+6*i);
        finalString+= ' L'+startX+' '+(4+6*i);
        finalString+= ' Z'; 
    }
    return finalString
} 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题