views:

271

answers:

3
var arr = {'a':fn1,'b':fn2,'c':fn3}

$.each(arr,function(name,func){
(do something particular for the last iteration)
...
})

It'll be best if no additional variables are used.

EDIT: I mean LITERALLY last one,which is the last pair I type them.

+7  A: 

Your example variable is called 'arr', but it's not an array at all (it's an object). This makes it a little confusing.

When iterating over an object, there's no such thing as a "last" property, because the order of properties is undefined by design.

When iterating over an array, you can simply compare the first parameter of the callback with the (array.length-1) to detect the last iteration.

In code (for arrays):

var arr = [ "a","b","c" ];

$.each(arr, function(i,val) { if (i == arr.length-1) ... });
Philippe Leybaert
Can you "say" it in code?
Shore
Why is this down voted?
rahul
I also wonder...
Philippe Leybaert
Would also like to know why it would have been downvoted... if there's something wrong then let us know why (otherwise how do we learn?)
Mayo
Interesting... more coward downvotes :-)
Philippe Leybaert
+2  A: 

Philippe Leybaert's answer outlines the problems with your question very well, and there is probably a clearer way of doing what you want. But that said, I cannot see a way to do what you ask without using an extra variable.

var obj = { 'a': fn1, 'b': fn2, 'c': fn3 };
var lastKey;

$.each(obj, function(key, fn) {
    // do stuff...
    lastKey = key;
});

obj[lastKey].doStuffForLastIteration();
Alex Barrett
+1  A: 

Now that I have seen your duplicate question - where you state, "For the following,it's 'c':fn3" - it seems you might be after the value of the maximum property of an object.

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];
Alex Barrett