var associativeArray = [];
associativeArray[\'key1\'] = \'value1\';
associativeArray[\'key2\'] = \'value2\';
associativeArray[\'key3\'] = \'value3\';
associativeArr
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.
If you don't use jQuery, you could extend the prototype of Object doing this:
// Returns the index of the value if it exists, or undefined if not
Object.defineProperty(Object.prototype, "associativeIndexOf", {
value: function(value) {
for (var key in this) if (this[key] == value) return key;
return undefined;
}
});
Using this way instead of the common Object.prototype.associativeIndexOf = ...
will work with jQuery if you use it.
And then you could use it like this:
var myArray = {...};
var index = myArray.associativeIndexOf(value);
It will also work with normal arrays: [...]
, so you could use it instead of indexOf
too.
Remember to use the triple-character operators to check if it's undefined:
index === undefined // to check the value/index exists
index !== undefined // to check the value/index does not exist
Of course you could change the name of the function if you prefer to for example keyOf
, and remember not to declare any variable called 'undefined'.