我如何从Javascript中的参数中创建if语句?

时间:2014-08-11 01:17:26

标签: javascript function if-statement

我需要将某些参数传递给函数,并根据传递给它的参数从数组中提取该函数。这很难解释,所以我会告诉你我想做什么。

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

我可以创建多个函数或者使用基于参数的函数fork,但这似乎不是解决此问题的最佳方法。

3 个答案:

答案 0 :(得分:0)

听起来您可能对typeof运算符感兴趣:

if (typeof deck == 'object') { ... }
if (typeof deck[0].color == 'string') { ... }
if (typeof deck[0].value == 'number') { ... }

可替换地:

if (deck[0].hasOwnProperty('color')) { ... }

答案 1 :(得分:0)

如果我正确理解了这一点,您希望if(deck[0].property == value)的每次调用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, ...);

答案 2 :(得分:0)

这就是我想出的。你需要将检查方式(“=='oragne'”或“&lt; 3”)作为字符串。

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);
        }
    }
}

希望这是你想要的;)

Here is a working jsfiddle example,当然可能会有一种更优雅的方式,这正是我想出来的。请注意,eval可能很危险,因此如果用户选择测试内容(将字符串推入数组中),您应该小心。