var arr = {'a':fn1,'b':fn2,'c':fn3}
$.each(arr,function(name,func){
(do something particular for the last iteration)
...
})
如果沒有使用其他變量,這將是最好的。
編輯: 我的意思是LITERALLY最後一個,這是最後一對我鍵入。
var arr = {'a':fn1,'b':fn2,'c':fn3}
$.each(arr,function(name,func){
(do something particular for the last iteration)
...
})
如果沒有使用其他變量,這將是最好的。
編輯: 我的意思是LITERALLY最後一個,這是最後一對我鍵入。
您的示例變量稱爲'arr',但它根本不是數組(它是一個對象)。這使它有點混亂。
當遍歷一個對象時,不存在「last」屬性,因爲屬性的順序未由設計定義。
在迭代數組時,可以簡單地比較回調的第一個參數和(array.length-1)來檢測最後一次迭代。
在代碼(陣列):
var arr = [ "a","b","c" ];
$.each(arr, function(i,val) { if (i == arr.length-1) ... });
菲利普Leybaert的回答概括你的問題的問題非常好,而且有可能是做你想要的東西更清晰的方式。但是,那說,我不能看到一種方法來做你所要求的,而不使用額外的變量。
var obj = { 'a': fn1, 'b': fn2, 'c': fn3 };
var lastKey;
$.each(obj, function(key, fn) {
// do stuff...
lastKey = key;
});
obj[lastKey].doStuffForLastIteration();
現在,我已經看到了你duplicate question - 在你的狀態,「在下面,它的‘C’:fn3的」 - 看來你可能是一個對象的最大屬性的值之後。
var obj = { 'a': fn1, 'b': fn2, 'c': fn3 };
var maxKey;
for (var key in arr) {
if (!(maxKey > key)) {
maxKey = key;
}
}
// fn will be fn3
var fn = obj[maxKey];
如果你需要一些事情發生,說你遍歷一個列表,你想另一個目的是要有條件地插入,但如果條件不滿足,你需要它是最後插入,你可以做一些事情像:
$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;
}
});
這是菲利普的解決方案,真的是一回事。如果出於某種原因,這不應該起作用,請評論並讓我知道,因爲我使用它。
在這裏,我提出了一個全新的,改進的答案。
一個優雅的方式可能是使用after()
函數包裝。下面的代碼:
function after(fn, times){
return function(){
if(--times === 0){
var args = Array.prototype.slice.call(arguments);
fn.apply(this, args);
}
};
}
fn
是你想在最後要執行的功能,times
是你正在等待不同的反應數目。
after()
包裝您的功能,並創建一個新的功能,只有在times
調用後才能運行其代碼。下面是一個例子簡要:
function onLastResponse(foo){
console.log('this is last iteration');
}
var myCallback = after(onLastResponse, 3);
myCallback(); //not executed
myCallback(); //not executed
myCallback(); //executed
檢查這個jsbin一個活生生的例子:https://jsbin.com/sufaqowumo/edit?js,console
爲什麼,所以你需要知道什麼時候它的最後一個元素?也許有一個更簡單的解決方案。 – Gumbo 2009-09-09 11:08:02
請注意,您的'arr'是一個對象,JavaScript中的對象成員沒有保證的順序。所以實際上沒有「最後」項目。 – Fabian 2009-09-09 11:16:24
@Fabian Neumann,你能證明嗎? – omg 2009-09-09 11:46:55