Steve, your right, wrong choice of words, I meant *defined indexes* :) Ah, love being right! =p
Thanks Ryan, but the first element is at index 1 by design, thats the way it should work. Thanks Aaron! BTW, didnt check the code but this covers $each as well? (99.9% that it would but just checking) On Tue, Dec 15, 2009 at 7:05 AM, Aaron Newton <[email protected]> wrote: > > https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/ForEach > > It would appear that our implementation of forEach is, indeed, incorrect. > > > -Aaron > > Sorry for any typos. Big fingers , tiny buttons. > > On Dec 14, 2009, at 8:56 PM, Roman Land <[email protected]> wrote: > > For one, Firefox doesnt include it, neither does Chrome, but IE does, you > could be right, and you could be wrong, it really depends on who is > implementing the foreach loop, either way I am with FF Chrome etc, foreach > should iterate over *existing elements only!* > > On Tue, Dec 15, 2009 at 3:48 AM, Steve Onnis < <[email protected]> > [email protected]> wrote: > >> even though it may be empty or null, the array position is still there >> so why wouldnt it be included in the each loop? >> >> ------------------------------ >> *From:* Roman Land [mailto: <[email protected]>[email protected]] >> *Sent:* Tuesday, 15 December 2009 12:42 PM >> >> *To:* <[email protected]>[email protected] >> *Subject:* Re: [Moo] Found a very annoying bug.. >> >> if you read the literal function name - for*each* - makes you expect >> they function to run over existing array banks only. >> That is the only part I am arguing about, I dont see how is my array >> "dirty" for not having an element in position 0. >> >> On Tue, Dec 15, 2009 at 3:17 AM, Steve Onnis < <[email protected]> >> [email protected]> wrote: >> >>> i would disagree >>> >>> if you say "hey here is an array, can you loop over it for me?" then it >>> is doing what you ask it to do...its not the functions fault that you hand >>> it dirty data. its up to you as a programmer to deal with the data >>> correctly. >>> >>> ------------------------------ >>> *From:* Roman Land [mailto: <[email protected]>[email protected]] >>> >>> *Sent:* Tuesday, 15 December 2009 11:53 AM >>> >>> *To:* <[email protected]>[email protected] >>> *Subject:* Re: [Moo] Found a very annoying bug.. >>> >>> Thats true, it does look better. >>> >>> About who's fault it is, I would expect a "foreach" loop not to try to >>> itterate over an non existant element (at position 0 or whatever), the fact >>> I am trying to use this nonexistent element later is not so evil IMO :) >>> >>> for ( var thought in thoughts) { if (thought) alert("I think, therefor I >>> exist!") } >>> >>> On Tue, Dec 15, 2009 at 2:32 AM, Aaron Newton < <[email protected]> >>> [email protected]> wrote: >>> >>>> this is by far the better option. >>>> >>>> it's not IE's fault that you are trying to reference something that >>>> doesn't exist. This isn't a bug in IE or MooTools. >>>> >>>> >>>> On Mon, Dec 14, 2009 at 7:09 PM, Barry van Oudtshoorn >>>> <<[email protected]> >>>> [email protected]> wrote: >>>> >>>>> What about doing something like >>>>> >>>>> $each(arr, function(item) { >>>>> if (item && item.foo) item.foo(); >>>>> }) >>>>> >>>>> It's more robust and will mean that you can start indexing your arrays >>>>> from whatever you want. >>>>> >>>>> >>>>> On 15/12/09 08:04, Roman Land wrote: >>>>> >>>>> Indeed this code would cause an issue for me, since the issue is not >>>>> due to referencing of the nonexistent item, rather inside the loop I do >>>>> something like: >>>>> >>>>> $each(arr, function(item, i) { >>>>> item.foo(); // this will throw an error on undefiled object and stop >>>>> JS >>>>> }) >>>>> >>>>> My workaround by the way is to check weather i == 0 (this is a special >>>>> array I use where I normally start at position 1). >>>>> >>>>> FF's implementation does actually jump over position 0 - starting at 1, >>>>> that would be logical interpretation of "foreach" vs "for (i =0 ; i < >>>>> smt.length ; i++)" - where I tell him to begin at position 0 explicitly. >>>>> >>>>> Cheers >>>>> -- Roman >>>>> >>>>> On Tue, Dec 15, 2009 at 1:18 AM, Aaron Newton < <[email protected]> >>>>> [email protected]> wrote: >>>>> >>>>>> Here is the code for forEach, implemented into browsers that do not >>>>>> implement it themselves: >>>>>> >>>>>> forEach: function(fn, bind){ >>>>>> for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, >>>>>> this); >>>>>> } >>>>>> >>>>>> as you can see, it loops over each item and calls your function, >>>>>> passing the array's value at i. This is undefined for your zero value. I >>>>>> don't know where IE would freak out on this (though it doesn't surprise >>>>>> me >>>>>> that it might). The code above references yourArray[index] that shouldn't >>>>>> throw an error... >>>>>> >>>>>> Aaron >>>>>> >>>>>> On Mon, Dec 14, 2009 at 12:31 PM, Roman Land < <[email protected]> >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Lolz on the kindly:) >>>>>>> >>>>>>> Paul, this site is meant to work on all browsers, I currently have a >>>>>>> work around, this behavior is undesired despite it's roots being in >>>>>>> ie >>>>>>> implementation of foreach. >>>>>>> >>>>>>> Cheers, Roman >>>>>>> >>>>>>> On 14/12/2009, at 18:28, Paul Saukas < <[email protected]> >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>> >>>>>>> > Roman , >>>>>>> > >>>>>>> > I believe that is an IE issue . I have no problem running your >>>>>>> > example on IE8 . It just kindly spits undefined out in place of the >>>>>>> > missing element 0 if i have it display the items, If i do the keys >>>>>>> > then IE shows 01234 and ff 1234. What version of IE are you using ? >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> --- >>>>> "Make everything as simple as possible, but not simpler." >>>>> >>>>> - Albert Einstein >>>>> >>>>> >>>>> >>>>> -- >>>>> Not sent from my iPhone. >>>>> >>>>> >>>> >>> >>> >>> -- >>> --- >>> "Make everything as simple as possible, but not simpler." >>> >>> - Albert Einstein >>> >>> >> >> >> -- >> --- >> "Make everything as simple as possible, but not simpler." >> >> - Albert Einstein >> >> > > > -- > --- > "Make everything as simple as possible, but not simpler." > > - Albert Einstein > > -- --- "Make everything as simple as possible, but not simpler." - Albert Einstein
