Thanks Danny.

If associated arrays in javascript is using memory map in the RTE,
e.g., C/C++ string list map, then the key is a hash and there is no
order to it.  Traversal is unpredictable and FIFO (queues), LIFO
(stacks) does not apply here.

--
HLS


On Oct 11, 6:58 pm, [EMAIL PROTECTED] wrote:
> I would be very wary of assuming that the for loop goes Last In First
> Out. To quote the Mozilla docs (http://developer.mozilla.org/en/docs/
> Core_JavaScript_1.5_Reference:Statements:for...in):
> A for...in loop iterates over the properties of an object in an
> arbitrary order.
>
> It may work correctly in the browsers you tested, but could break at
> any time.
>
> Danny Wachsstock
>
> On Oct 11, 3:30 pm, Flesler <[EMAIL PROTECTED]> wrote:
>
> > The for iteration goes from the older ones to newer ones, so if you
> > want to keep newer ones (FIFO):
> > function pruneCache(amt) {
> >    for (var i in cache) {
> >         if (cache.length <= amt) return;//pruned
> >         delete cache[i];
> >         cache.length--;
> >    }}
>
> > that asumes you are keeping the length updated till here. If you want
> > to remove newer first(LIFO):
> > function pruneCache(amt) {
> >    delete cache.length;//remove length to avoid iterating it
> >    var copy = {length:0}; //new hash
> >    for (var i in cache) {
> >         if (copy.length >= amt) break;//done
> >         copy[i] = cache[i];
> >         copy.length++;
> >    }
> >    cache = copy;//replace the old cache
>
> > }
>
> > The other option is to have 2 parallel arrays of keys and values...
> > Hope that helps.
>
> > Ariel Flesler
>
> > On Oct 11, 4:54 pm, Pops <[EMAIL PROTECTED]> wrote:
>
> > > Thanks Mike and Wizzud.
>
> > > Question:
>
> > > What I wanted to use this for was my cache and to "truncate" old
> > > data.  I see that using a real array will allow me to use the
> > > inherited .length property to set a new size and it will do
> > > truncation.  But since I am using an associated array, the length
> > > property is no longer usable.
>
> > > So if I use the for loop with delete, will I be pulling the "rug from
> > > under its feet?"
>
> > > Typically, in code designs like this, you would do a reverse traversal
> > > to delete the last entries first so you can keep with the internal
> > > loop counters and/or references.
>
> > > In other words, is this "safe?"
>
> > >   function pruneCache(amt) {
> > >     var n = 0;
> > >     for (var i in cache) {
> > >         if (amt > 0) {
> > >            amt--;
> > >            delete cache[i];
> > >            return;
> > >         }
> > >         n++;
> > >     }
> > >     cache.length = n;
> > >   }
>
> > > If not, then in lieu of a reverse loop syntax,  I would probably need
> > > to copy the cache first?   I have not checked but if returning false
> > > stops the traveral that would be more efficient.
>
> > > I could recode all this into a pure indexed array and then use
> > > the .length, but then I would need a fast lookup method or 2nd matrix
> > > to map the associated name with the array index.
>
> > > Thanks
>
> > > --
> > > HLS
>
> > > On Oct 11, 4:26 am, "Michael Geary" <[EMAIL PROTECTED]> wrote:
>
> > > > > From: Pops
>
> > > > > Is this the only way to iterate through an object?
>
> > > > >      for ( x in myObject) {
> > > > >      }
>
> > > > Ultimately, yes. You can use something like $.each() on an object, but 
> > > > it
> > > > just runs that same for loop internally - see the source code for 
> > > > $.each().
>
> > > > > and how can you remove an field in an object?
>
> > > > > For example:
>
> > > > >    var obj = {
> > > > >        x1: 1123,
> > > > >        x2: 212,
> > > > >        x3: 123131
> > > > >    };
>
> > > > > I want to remove obj.x2 the obj object to end up with:
>
> > > > >    { x1: 1123, x3: 123131}
>
> > > > delete obj.x2;
>
> > > > or
>
> > > > delete obj['x2'];
>
> > > > Note that it is not an error if the property doesn't exist, so you don't
> > > > have to "protect" the delete with code like this:
>
> > > > if( 'x2' in obj ) delete obj.x2;  // unnecessary precaution
>
> > > > -Mike- Hide quoted text -
>
> > > - Show quoted text -

Reply via email to