2011-01-26 2 views
1

私はtrueまたはfalseを返す関数を持っています。Javascriptのインターレーターの中から値を返す方法

関数内では、ページ上のいくつかの要素を繰り返し、その値をチェックします。

しかし、イテレータ内にreturn文を置くと、匿名関数から正しく戻りますか? (外部関数ではありません)。

function someElementHasZeroValue() { 
    $('.some-class').each(function(){ 
    if($(this).html() == '0'){ 
     return true; 
    } 
    }); 
    return false; 
} 

したがって、この関数は何に関係なく常にfalseを返します。

これを行うにはどのような方法が最適ですか?下の解決策はうまくいくようですが、それほどエレガントではありません。より一般的に

function someElementHasZeroValue() { 
    elements_found_with_zero_value = 0; 
    $('.some-class').each(function(){ 
    if($(this).html() == '0'){ 
     elements_found_with_zero_value += 1; 
    } 
    }); 

    if(elements_found_with_zero_value > 0){ 
    return true; 
    }else { 
    return false; 
    } 
} 

Javascriptがほとんどの言語のような通常のイテレータとは対照的に、無名関数を持つ要素を反復処理する必要があります、または私は認識していないよそれを行うにはいくつかの方法があり、なぜ、誰もが知っているのですか?

答えて

2

純粋なJavascriptではなく、jQueryを使用しています。あなたは、通常のループ行うことができます。また

function someElementHasZeroValue() { 
    var selection = $('.some-class'); 
    for (var i = 0; i < selection.length; i++) { 
     if ($(selection[i]).html() === '0') { 
      return true; 
     } 
    } 
    return false; 
} 

を、あなたはより多くのjQueryのような方法でこれを行うことができます:

function someElementHasZeroValue() { 
    return $('.some-class').filter(function(){ 
     return $(this).html() === '0'; 
    }).length > 0; 
} 
3

あなたのような解決策が必要ですが、それは少し簡単かもしれません。あなたはif()が成功した場合.each()ループを切断したい場合

function someElementHasZeroValue() { 
     // this is the return value, initialized as false 
    var ret = false; 
    $('.some-class').each(function(){ 
    if($(this).html() == '0'){ 
     ret = true; // set it to true 
    } 
    }); 
    return ret; // return the value of "ret" 
} 

また、あなたは機能を返さずにループを中断しますreturn false;を、追加することができます。

if($(this).html() == '0') { 
     ret = true; // set it to true 
     return false; // break the each() loop 
    } 
1

まあ、JavaScriptはこれを必要としません。それはそれをやっているjQueryです。 JavaScriptを使用すると、通常のforループを実行してそのように戻すことができます。 jQueryのeach()は、使用するセレクタのすべての一致に対してjQueryオブジェクトを徐々に返します。あなたはこのような何か行うことができます:

function someElementHasZeroValue() { 
    var returnValue = false; 
    $('.some-class').each(function(){ 
    if($(this).html() == '0'){ 
     returnValue = true; 
    } 
    }); 
    return returnValue; 
} 
1

function someElementHasZeroValue() { 
    var result = false; 

    $('.some-class').each(function() { 
    if (($this).html() == '0') { 
     result = true; 
     return false; 
    } 
    }); 

    return result; 
} 

を、それが「通常のサイクル」にbreakに似て、(jQueryのドキュメントを参照してください)return falseeach内部のコールバックは、我々は反復を中断しなければならないことを意味することに注意してください。

また、常に変数の宣言をvar(グローバル変数の代わりにローカル変数を使用)とすることをお勧めします。

関連する問題