[removed] how to get index of an object in an associative array?

后端 未结 2 502
天命终不由人
天命终不由人 2020-12-29 20:31
var associativeArray = [];

associativeArray[\'key1\'] = \'value1\';
associativeArray[\'key2\'] = \'value2\';
associativeArray[\'key3\'] = \'value3\';
associativeArr         


        
相关标签:
2条回答
  • 2020-12-29 21:04

    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.

    0 讨论(0)
  • 2020-12-29 21:19

    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'.

    0 讨论(0)
提交回复
热议问题