2011-11-22 16 views
49

क्या कोई मुझे बता सकता है कि 5 प्रविष्टि के बाद लूप क्यों नहीं रुक गया?
http://jsbin.com/ucuqot/edit#previewप्रत्येक में Jquery - स्टॉप लूप और वापसी ऑब्जेक्ट


$(document).ready(function() 
{ 
    someArray = new Array(); 
    someArray[0] = 't5'; 
    someArray[1] = 'z12'; 
    someArray[2] = 'b88'; 
    someArray[3] = 's55'; 
    someArray[4] = 'e51'; 
    someArray[5] = 'o322'; 
    someArray[6] = 'i22'; 
    someArray[7] = 'k954'; 

    var test = findXX('o322'); 

}); 

function findXX(word) 
{ 
    $.each(someArray, function(i) 
    { 
    $('body').append('-> '+i+'<br />'); 
    if(someArray[i] == 'someArray') 
    { 
     return someArray[i]; //<--- did not stop the loop! 
    } 
    }); 
} 

अग्रिम धन्यवाद!

+0

क्या आप सुनिश्चित हैं कि यह सच है अगर (कुछअरे [i] == 'someArray') – zaoudis

+2

मुझे लगता है कि यह हालत (कुछअरे [i] == 'someArray') होना चाहिए (कुछ आरे [i] == शब्द) – Irfan

+1

@ user970727 मेरे उत्तर पर ध्यान दें। यह प्रत्येक कमांड –

उत्तर

109

क्योंकि जब आप एक each पाश, अंदर एक return कथन का उपयोग एक "गैर झूठी" मान continue रूप में कार्य करेगा, wheras false एक break रूप में कार्य करेगा । आपको each फ़ंक्शन से false वापस करने की आवश्यकता होगी। कुछ इस तरह:

function findXX(word) { 
    var toReturn; 
    $.each(someArray, function(i) { 
     $('body').append('-> '+i+'<br />'); 
     if(someArray[i] == word) { 
      toReturn = someArray[i]; 
      return false; 
     } 
    }); 
    return toReturn; 
} 

docs से:

हम कॉलबैक फ़ंक्शन रिटर्न फाल्स बनाकर एक विशेष यात्रा पर $ .प्रत्येक() पाश तोड़ सकते हैं। गैर-झूठी रिटर्निंग लूप में जारी बयान के समान है; यह तुरंत अगले पुनरावृत्ति पर छोड़ देगा।

+1

आप एकीकृत 'फ़ंक्शन (i, n) 'का उपयोग क्यों नहीं करते? –

+0

http://jsbin.com/ucuqot/4/edit#preview ... नहीं रुक गया? – user970727

+0

क्योंकि मैंने अभी कोड में ओपी को कोड में पोस्ट किया था और 'रिटर्न' बदल दिया था। –

0

इस प्रयास करें ...

someArray = new Array(); 
    someArray[0] = 't5'; 
    someArray[1] = 'z12'; 
    someArray[2] = 'b88'; 
    someArray[3] = 's55'; 
    someArray[4] = 'e51'; 
    someArray[5] = 'o322'; 
    someArray[6] = 'i22'; 
    someArray[7] = 'k954'; 

    var test = findXX('o322'); 
    console.log(test); 



function findXX(word) 
{ 
    for(var i in someArray){ 


    if(someArray[i] == word) 
    { 
     return someArray[i]; //<--- stop the loop! 
    } 
    } 
} 
1

संशोधित $.each समारोह

$.fn.eachReturn = function(arr, callback) { 
    var result = null; 
    $.each(arr, function(index, value){ 
     var test = callback(index, value); 
     if (test) { 
      result = test; 
      return false; 
     } 
    }); 
    return result ; 
} 

यह गैर झूठी/गैर खाली परिणाम पर पाश तोड़ने के लिए और इसे वापस लौटने के लिए, अपने मामले में ऐसा होगा यह

return $.eachReturn(someArray, function(i){ 
    ... 
संबंधित मुद्दे