如何将这个javascript逻辑代码编写成更高效/紧凑的方式?

时间:2016-09-23 03:55:04

标签: javascript angularjs

在我正在进行的项目中,我有21个按钮,它们都具有活动和非活动状态。某些按钮的状态受到按下的其他按钮以及按下该按钮的影响。在我的html中,我使用ng-click调用函数updateActiveButtons(num)来激活或停用某些按钮。

我能想到的最好的方法是使用一个包含21个元素的数组,所有这些元素默认设置为false,然后在按下时更改。

问题在于我的代码是UGLY而且我知道必须有一种更好的逻辑方法。

这是我的updateActiveButtons函数:

public static String FizzBuzz(int number) 
{
    if( (number%3==0) && (number%5==0)) {
        return "FizzBuzz";
    }
    else if( number%3 == 0 ) {
        return "Fizz";
    } else if( number%5 == 0 ) {
        return "Buzz";
    } else {
        return ""+number;
    }
}

/*
 * use a for loop to print the appropriate FizzBuzz values (feel free to
 * call the provided FizzBuzz function) for values from from to to, 
 * including both of those values. Each value should be printed in a separate line.
 */
public static void printFizzBuzz(int from, int to, PrintStream out)
{
    for (int i = 1; i <= to; ++i){
        FizzBuzz(++i);
    }
}

我有很多重复的代码以一种感觉不是很好或专业的方式出现。将此信息发送给客户我并不自豪。有没有人对我如何做得更好有任何建议?

2 个答案:

答案 0 :(得分:0)

通过方法/函数

替换整个条件(或块)

所以

    if($scope.activeButtonArray[4] || $scope.activeButtonArray[5]) {
        $scope.activeButtonArray[0] = true;
    }

变为

if (somethingIsSomething($scope))

这具有更多自我记录的额外好处,因此您可以阅读&#34;你正在做什么。

答案 1 :(得分:0)

我喜欢pixelearth建议只创建另一个功能,所以我做了。

我决定创建一个以数组,起点和终点作为参数的函数,如果该范围内的任何数组值都为真,则返回true。

这是功能:

var arrayContainsTrue = function(arr, start, end) {
    for(var i = start; i <= end; i++) {
        if(arr[i] == true) {
            return true;
        }
    }
    return false;
}

然后缩短我的代码我就这么做了(根据需要使用不同的起点和终点):

if(!arrayContainsTrue($scope.activeButtonArray, 6, 11))