我可以创建一个矩阵,根据三个输入变量设置两个变量的状态吗?

时间:2014-05-08 12:51:42

标签: javascript

我有三个javascript布尔值,可以是true或false;

var duplicate
var subTopicClicked
var subTopicSelected

根据这些的不同组合,我希望设置状态 以下两个变量为真假:

var $scope.modal.disableAddSubTopic;
var $scope.modal.disableDeleteSubTopic;

我已尝试用if else块做了几个小时但是 组合变得太多了,我的代码现在看起来很乱。我会在帖子中包含此代码,但我认为这样做只会让人感到困惑,而且我并不是在寻找任何人帮我整理代码。

而不是混乱的if else混乱是另一种方式 我可以通过设置某种类型的矩阵来实现这一点 选项,然后使用它来设置我的两个按钮的状态?

2 个答案:

答案 0 :(得分:1)

我想你的意思是这样的,你的树被描述为一个巢?

var matrix = [
    [ // first false
        [ // second false
            [false, false], // third false
            [false, false]  // third true
        ],
        [ // second true
            [false, false], // third false
            [false, false]  // third true
        ]
    ],
    [ // first true
        [ // second false
            [false, false], // third false
            [false, false]  // third true
        ],
        [ // second true
            [false, false], // third false
            [false, false]  // third true
        ]
    ]

];

var a = matrix[+duplicate][+subTopicClicked][+subTopicSelected];
$scope.modal.disableAddSubTopic = a[0];
$scope.modal.disableDeleteSubTopic = a[1];

答案 1 :(得分:1)

您可以在三个布尔值中构建一个数字,该数字将用作查找数组中的索引:

var index =    ( duplicate        ? 4 : 0 )  
             + ( subTopicClicked  ? 2 : 0 ) 
             + ( subTopicSelected ? 1 : 0 ) ;

您的数组将包含8个元素,如下所示:

var  stateArray = [ /*no duplicate*/  /*not clicked*/
                                            /*not selected*/     value1,
                                            /*selected*/         value2,
                                      /*clicked*/
                                            /*not selected*/     value3,
                                            /*selected*/         value4,
                    /*duplicate */   /*not clicked*/
                                            /*not selected*/     value5,
                                            /*selected*/         value6,
                                      /*clicked*/
                                            /*not selected*/     value7,
                                            /*selected*/         value8   ] ;

只需将查找包装在函数

function getState(duplicate, subTopicClicked, subTopicSelected ) {
         var index =    ( duplicate        ? 4 : 0 )  
                      + ( subTopicClicked  ? 2 : 0 ) 
                      + ( subTopicSelected ? 1 : 0 ) ;
         return stateArray[index] ;
}

所以现在如果你使用两个布尔值的数组作为值(例如:value1 = [true,false]),请使用另一个函数设置你的全局变量以保持清洁:

function setupGlobals(duplicate, subTopicClicked, subTopicSelected ) {
     var valueForThisConfig = getState(duplicate, subTopicClicked, subTopicSelected ) ;
     $scope.modal.disableAddSubTopic    = valueForThisConfig[0] ;
     $scope.modal.disableDeleteSubTopic = valueForThisConfig[1] ; 
}