Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Javascript中的参数生成If语句?_Javascript_Function_If Statement - Fatal编程技术网

如何从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);
        }
    }
}