我有三个javascript布尔值,可以是true或false;
var duplicate
var subTopicClicked
var subTopicSelected
根据这些的不同组合,我希望设置状态 以下两个变量为真假:
var $scope.modal.disableAddSubTopic;
var $scope.modal.disableDeleteSubTopic;
我已尝试用if else
块做了几个小时但是
组合变得太多了,我的代码现在看起来很乱。我会在帖子中包含此代码,但我认为这样做只会让人感到困惑,而且我并不是在寻找任何人帮我整理代码。
而不是混乱的if else
混乱是另一种方式
我可以通过设置某种类型的矩阵来实现这一点
选项,然后使用它来设置我的两个按钮的状态?
答案 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] ;
}