是否在jQuery中使用$ .each函数进行条件循环

我有一个关于jQuery的$.each方法的查询。 下面是我的ajax工作得很好:

 $.ajax({ url:'js/people-json.js', type:'post', dataType:'json', success:function(data){ $.each(data.names, function(i, data) { console.log(data); }); }, error:function(err){ console.log(err); } }); 

这个脚本工作正常,给了我想要得到的JSON结果。 然而,这给了我结果,但这是我存储在外部JS文件中的一长串信息,其中JSON格式如下所示:

 { "people": [ { "name": "aaa", "age": 32, "email": "aaa@abc.xyz" }, { "name": "bbb", "age": 21, "email": "bbb@abc.xyz" }, { "name": "ccc", "age": 45, "email": "ccc@abc.xyz" }, ..............lot of more here around 8000 ] } 

有没有办法以这种方式循环jQuery:

 $.each(data.names<=200, function(i, data) { console.log(data); }); 

或者这样:

 $.each(data.names, function(i<=200, data) { console.log(data); }); 

或者这一个:

 $.each(data.names, function(i, data<=200) { console.log(data); }); 

我们可以在第一次加载时循环使用200个结果,然后单击另一个200的按钮循环,依此类推。

注意:我更喜欢jQuery解决方案。

直接回答你的问题,不。

.each()迭代集合中的所有项目。 它不提供过滤选项。 您将像这样过滤自己并更改每次单击的if语句中的值:

 $.each(data, function(i, data) { if (i <= 200) { console.log(data); } }); 

或者,如果data是一个数组,您可以提取前200个并迭代它们:

 $.each(data.slice(0, 200), function(i, data) { console.log(data); }); 

或者,如果data是数组, for循环将为您提供更大的灵活性:

 for (var i = 0; i < 200; i++) { console.log(data[i]); } 

如果您每次点击都要尝试200个项目,那么您需要更多地了解您正在做的事情。 你从ajax电话获得所有结果吗? 如果是这样,他们你不想每次都要反映它们。 只需存储所有结果,然后每次处理下200个结果。 保留一个计数器变量,指示到目前为止已经处理了多少。

 var data = [...]; var dataIterationCnt = 0; function getNextChunk(n) { var end = Math.min(dataIterationCnt + n, data.length) for (var i = dataIterationCnt; i < end; i++) { console.log(data[i]); } dataIterationCnt = i; return(dataIterationCnt < data.length); } // then in your code, you just call getNextChunk(200) // until it returns null which means it has no more to iterate var more = getNextChunk(200); 

坚持使用jQuery,最简单的方法是遍历data.names所有项目,直到批处理中的最后一项,在批处理开始之前拒绝这些项目。

 var nameObj = { index: 0, batchSize: 200 }; function nextNamesBatch() { $.each(data.names, function(i, data) { if(i < nameObj.index) return true;//==continue if(i >= nameObj.index + nameObj.batchSize) return false;//==break console.log(data); }); nameObj.index += nameObj.batchSize; } 

是的,随着批次的进展,效率问题日益严重,但我相信,对于中等规模的数组,开销将小于替代jQuery方法的开销,即在$.each(...)之前限制data.names (或它的克隆)。 $.each(...)

它可以是基于标签..或数据列表,你可以试着告诉它是否有用..

 $('li').each(function(index) { alert(index + ': ' + $(this).text()); }); 

请申请这样的逻辑并测试..