deepIndexOf Array prototype

Search an array of objects for an item that matches the given property value

by Matthew Marcus

HTML

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>

<script type="text/javascript">
    var jq17 = jQuery.noConflict(true);
    console.log('Any Problems?');
</script>

JavaScript

if(typeof Object.keys !== 'function'){
    Object.prototype.keys  = function(obj){
        var keys = [];
        for(var key in obj){
            keys.push(key);
        }
        return keys;
    }
}

Object.prototype.entries = function(){
    var 
        keys = Object.keys(this),
        entries = [];
    for (var i = 0; i < keys.length; i++){
        entries.push({
            key: keys[i],
            value: this[keys[i]]
        });
    }
    
    return entries;
};

Array.prototype.deepIndexOf = function(searchObj) {
	var
		retVal = -1,
		self = this,
		searchEntries = searchObj.entries()[0];

	for(var index=0; index < self.length; index++){
		var item = self[index];
		if (item.hasOwnProperty(searchEntries.key)) {
			if (item[searchEntries.key] === searchEntries.value) {
				retVal = index;
				return retVal;
			}
		}
	};
	return retVal;
};

var arr = [
    {
        a: 1,
        b: 2
    },
    {
        a: 3,
        b: 4
    },
    {
        a: 5,
        b: 6
    },
    {
        a: 7,
        b: 8
    }
];

console.log(arr.deepIndexOf({a:5}));
console.log(arr.deepIndexOf({b:5}));