var arr = {'a':fn1,'b':fn2,'c':fn3}
$.each(arr,function(name,func){
(do something particular for the last iteration)
...
})
如果不使用额外的变量将是最好的。
编辑:我的意思是字面上的最后一对,这是我输入的最后一对。
发布于 2009-09-09 11:12:46
您的示例变量名为'arr',但它根本不是一个数组(它是一个对象)。这使得它有点令人困惑。
当迭代一个对象时,没有“最后一个”属性,因为属性的顺序在设计上是不确定的。
在迭代数组时,您可以简单地将回调的第一个参数与(array.length-1)进行比较,以检测最后一次迭代。
在代码中(用于数组):
var arr = [ "a","b","c" ];
$.each(arr, function(i,val) { if (i == arr.length-1) ... });
发布于 2009-09-09 11:30:14
Philippe Leybaert的回答很好地概括了你的问题,而且可能有一种更清晰的方法来做你想做的事情。但也就是说,我看不到一种不使用额外变量就能完成您所要求的操作的方法。
var obj = { 'a': fn1, 'b': fn2, 'c': fn3 };
var lastKey;
$.each(obj, function(key, fn) {
// do stuff...
lastKey = key;
});
obj[lastKey].doStuffForLastIteration();
发布于 2012-09-29 08:48:30
如果您需要发生某些事情,假设您正在迭代单个列表,并且希望有条件地插入另一个对象,但如果不满足条件,则需要最后插入它,您可以这样做:
$list = $({{some_selector}});
$list_elt = $({{some_html}})
$list.each(function (i) {
if ({{condition is met}}) {
$(this).before($list_elt);
return false;
}
else if (i == $list.length - 1) {
$(this).after($list_elt);
return false;
}
});
实际上,这和菲利普的解决方案是一样的。如果有什么原因,这不应该工作,请评论并让我知道,因为我使用它。
https://stackoverflow.com/questions/1399004
复制相似问题