我的问题是荒谬的,或者我正在寻找错误的东西,因为我找不到类似的东西.我想知道我是否可以动态创建具有多个条件的if语句?我能在现场想到的唯一方法是这样的:
function someTest( numOne, numTwo ) {
for (var i = numOne; i < numTwo; i++) {
if (someCol[i].test === false) {
return false;
}
}
}
someTest( 20, 35 );
Run Code Online (Sandbox Code Playgroud)
这只是一个例子来向你展示我的意思,因为它经历了多个if语句,如果它们中的任何一个都不是真的,那么它返回false,而'短路'就像带有&& multiple && parameters &&的普通if语句一样.但是这种强迫你使用表并使其他语句更复杂.如果有人有任何建议或更好的方法,请告诉我们.感谢您的任何意见
编辑:这有点复杂,但如果你坚持:-P.我有6行,每行有4列.因此,无论你想称呼它们,总共有24个"细胞"或"盒子".你可以加上或减去每个盒子,但它比这更棘手.您需要在第一行中至少有4个'点'才能访问第二行,因此要访问第4行,您至少需要12个点.
添加点很容易,它可以消除变得复杂的点.因为您不能只添加前3列,如果有超过12个点,您可以从第4列中删除一个点,以防第4列上方的列中有点,因为您仍然需要例如,第6列中有点的最小点数.这有意义吗?我将尝试创建一个快速的jsfiddle来向您展示一个正在运行的示例.给我一些
EDIT2:http: //jsfiddle.net/zBcBd/3/
仍然在努力,但正如你所看到的,除非第一行至少有4个点,否则你不能将点添加到第二行,然后你就不能在第三行中添加点,直到至少总共有8点.这是一个简单的部分,我想要完成的是删除点,但它必须测试一切.因此,例如,如果第6行中有分数,那么你不能从第5行中删除任何分数,除非有超过21分仍然支持第6行,有意义吗?
做一个聪明的语法的一种方法是让一个函数数组返回布尔值.
function biggerThanThree(){
return x>3;
}
function smallerThanFive(){
return x<5;
}
var predicates = [biggerThanThree,smallerThanFive];
//matches all conditions
var valid = predicates.reduce(function(x,y){return x&&y(); },true);
//matches any condition
var somevalid = predicates.reduce(function(x,y){return x||y(); },true);
Run Code Online (Sandbox Code Playgroud)
为了满足您的特定需求,您可以做一些更聪明的事情并生成您动态检查的功能:
var rows = [["+","+","+","-","-","+"],["+","+","+","-","-","+"],["+","+","+","-","-","+"]];
// accepts a row number and asserts that enough elements are in so far
function soFarHasMore(upToRowNum){
var sum = 0;
for(var i=0;i<upToRowNum;i++){
sum+=rows[i].filter(function(x){return x==="+"}).length;
}
console.log(sum);
return sum>=4*upToRowNum;
}
var predicates = [];
// generate functions dynamically and fixate their value of `i`
for(var i=0;i<3;i++){
predicates.push(soFarHasMore.bind(null,i+1));//pushes predicates dynamically
}
var valid = predicates.reduce(function(x,y){return x&&y(); },true);//matches all conditions
Run Code Online (Sandbox Code Playgroud)
注意:我使用reduce和|| 和&&因为我喜欢减少.但是,我认为有更多的语义版本可用:
predicates.every(function(elem){ // Same as &&
return elem();
};
predicates.some(function(elem){ // Same as ||
return elem();
};
Run Code Online (Sandbox Code Playgroud)