var arr = {'a':fn1,'b':fn2,'c':fn3}
$.each(arr,function(name,func){
(do something particular for the last iteration)
...
})
追加の変数が使用されていない場合に最適です。
EDIT: 私はそれらを入力し、最後のペアであるLITERALLY最後の1を意味します。
var arr = {'a':fn1,'b':fn2,'c':fn3}
$.each(arr,function(name,func){
(do something particular for the last iteration)
...
})
追加の変数が使用されていない場合に最適です。
EDIT: 私はそれらを入力し、最後のペアであるLITERALLY最後の1を意味します。
あなたの変数は 'arr'と呼ばれますが、配列ではありません(オブジェクトです)。これはちょっと混乱させます。
オブジェクトを反復処理するとき、プロパティの順序は設計によって定義されていないため、「最後」のプロパティはありません。
配列を反復処理するときは、コールバックの最初のパラメータを(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];
は、あなたが単一のリストを反復処理していると言うと、あなたは条件付きで挿入されるように別のオブジェクトを望んでいたが、条件が満たされない場合は、あなたが何かを行うことができ、最後に挿入することが必要like:
$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
あなたの 'arr'はオブジェクトであり、JavaScriptのオブジェクトメンバーは保証された順序を持っていないことに注意してください。実際には「最後の」アイテムはありません。 – Fabian
@Fabianノイマン、それを証明できますか? – omg