如何从Javascript中的参数生成If语句?
我需要将某些参数传递到函数中,并根据传递给函数的参数从数组中提取该函数。这很难解释,所以我会告诉你我在做什么如何从Javascript中的参数生成If语句?,javascript,function,if-statement,Javascript,Function,If Statement,我需要将某些参数传递到函数中,并根据传递给函数的参数从数组中提取该函数。这很难解释,所以我会告诉你我在做什么 function SearchDeck(deck,...){ var tryagain = true; do{ if(deck[0].property == value){ //do something; tryagain = false; } else{
function SearchDeck(deck,...){
var tryagain = true;
do{
if(deck[0].property == value){
//do something;
tryagain = false;
}
else{
deck.splice(0,1);
}
}
while(tryagain);
}
有多个甲板可供查看,适当的甲板将通过。我希望总是从数组的组索引0的顶部绘制。我需要不断地抽签,直到我找到一张和我想要的相匹配的牌。如果0索引不匹配,我将其拼接出来。我所追求的是动态的,不同的属性,甚至是我将使用的操作符。
我想用if语句的一些例子是
deck[0].color == "orange"
deck[0].value >= 5
deck[0].value < -4
我可以创建多个函数,或者基于一个参数创建函数分叉,但这似乎不是最好的方法。听起来您可能对运算符感兴趣:
if (typeof deck == 'object') { ... }
if (typeof deck[0].color == 'string') { ... }
if (typeof deck[0].value == 'number') { ... }
或者:
if (deck[0].hasOwnProperty('color')) { ... }
如果我理解正确,您希望ifdeck[0]的行为。属性==值对于SearchDeck的每次调用都是不同的。。。功能 我的建议是通过一项功能:
function SearchDeck(deck, validationFunction, ...){
var tryagain = true;
do{
if(validationFunction(deck[0])){
//do something;
tryagain = false;
}
else{
deck.splice(0,1);
}
}
while(tryagain);
}
然后,当您调用代码时,您可以执行以下操作:
SearchDeck(deck, function(firstCard) { return firstCard.color == "orange" }, ...);
SearchDeck(deck, function(firstCard) { return firstCard.value >= 5 }, ...);
SearchDeck(deck, function(firstCard) { return firstCard.value < -4 }, ...);
或者,如果您要查找的案例可能会被重用,那么创建这些命名函数也可能会更干净:
function validateColor(firstCard) {
return firstCard.color == "orange";
}
function validateHighValue(firstCard) {
return firstCard.value >= 5;
}
function validateLowValue(firstCard) {
return firstCard.value < -4;
}
SearchDeck(deck, validateColor, ...);
SearchDeck(deck, validateHighValue, ...);
SearchDeck(deck, validateLowValue, ...);
这就是我想到的。你需要推动检查的方式=='oragne'或啊,回调可能是比我更好的解决方案。请注意,作为一种更面向对象的方法,你可以创建一个deck对象并向其中添加搜索方法。然后你可以说deck.searchcallbackFunction;
function searchDeck() {
var deck = Array.prototype.slice.call(arguments, 1),
tryagain = true,
string = deck[deck.length - 1];
deck.pop();
while (tryagain) {
if (eval('deck[0].property' + string)) {
//do something;
alert('card found');
tryagain = false;
} else {
deck.splice(0, 1);
}
}
}