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

Reply via email to