javascript: how to get index of an object in an associative array?

var associativeArray = [];

associativeArray['key1'] = 'value1';
associativeArray['key2'] = 'value2';
associativeArray['key3'] = 'value3';
associativeArray['key4'] = 'value4';
associativeArray['key5'] = 'value5';

var key = null;
for(key in associativeArray)
{
    console.log("associativeArray[" + key + "]: " +  associativeArray[key]);        
}

key = 'key3';

var obj = associativeArray[key];        

// gives index = -1 in both cases why?
var index = associativeArray.indexOf(obj); 
// var index = associativeArray.indexOf(key);  

console.log("obj: " + obj + ", index: " + index);   

The above program prints index: -1, why? Is there any better way to get index of an object in an associative array without using loops?

What if I want to delete ‘key3’ from this array? the splice function takes first parameter as index which must be an integer.

Answer

indexOf only works with pure Javascript arrays, i.e. those with integer indexes. Your “array” is actually an object and should be declared as such

var associativeArray = {}

There’s no built-in indexOf for objects, but it’s easy to write.

var associativeArray = {}

associativeArray['key1'] = 'value1';
associativeArray['key2'] = 'value2';
associativeArray['key3'] = 'value3';
associativeArray['key4'] = 'value4';
associativeArray['key5'] = 'value5';

var value = 'value3';
for(var key in associativeArray)
{
    if(associativeArray[key]==value)
         console.log(key);
}

Without loops (assuming a modern browser):

foundKeys = Object.keys(associativeArray).filter(function(key) {
    return associativeArray[key] == value;
})

returns an array of keys that contain the given value.

Leave a Reply

Your email address will not be published. Required fields are marked *