how to prevent adding duplicate keys to a javascript array

iamsar picture iamsar · May 25, 2012 · Viewed 108.9k times · Source

I found a lot of related questions with answers talking about for...in loops and using hasOwnProperty but nothing I do works properly. All I want to do is check whether or not a key exists in an array and if not, add it.

I start with an empty array then add keys as the page is scrubbed with jQuery.

Initially, I hoped that something simple like the following would work: (using generic names)

if (!array[key])
   array[key] = value;

No go. Followed it up with:

for (var in array) {
   if (!array.hasOwnProperty(var))
      array[key] = value;
}

Also tried:

if (array.hasOwnProperty(key) == false)
   array[key] = value;

None of this has worked. Either nothing is pushed to the array or what I try is no better than simply declaring array[key] = value Why is something so simple so difficult to do. Any ideas to make this work?

Answer

Sampson picture Sampson · May 25, 2012

Generally speaking, this is better accomplished with an object instead since JavaScript doesn't really have associative arrays:

var foo = { bar: 0 };

Then use in to check for a key:

if ( !( 'bar' in foo ) ) {
    foo['bar'] = 42;
}

As was rightly pointed out in the comments below, this method is useful only when your keys will be strings, or items that can be represented as strings (such as numbers).