每个jquery – 停止循环和返回对象

有人可以告诉我为什么循环没有停止后,5条目?
http://jsbin.com/ucuqot/edit#preview


$(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! } }); } 

提前致谢!

因为当你在each循环中使用一个return语句时,一个“非假”的值将作为一个continue ,而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; } 

从文档 :

通过使callback函数返回false,我们可以在特定的迭代中打破$ .each()循环。 返回非错误与for循环中的continue语句相同; 它会立即跳到下一个迭代。

这里 :

http://jsbin.com/ucuqot/3/edit

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

修改$.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){ ... 

尝试这个 …

  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! } } }