How to get index of object by its property in JavaScript?

How to get index of object by its property in JavaScript?

For example i have:
var Data = [
{ id_list: 1, name: ‘Nick’, token: ‘312312’ },
{ id_list: 2, name: ‘John’, token: ‘123123’ },

Then i want to sort/reverse this object by name, for example. I get something like this:
var Data = [
{ id_list: 2, name: ‘John’, token: ‘123123’ },
{ id_list: 1, name: ‘Nick’, token: ‘312312’ },

And now i want to know index of object with property name=’John’ to get value of property token.


Solution 1:

As the other answers suggest, looping through the array is probably the best way. But I would put it in it’s own function, and make it a little more abstract:

function findWithAttr(array, attr, value) {
    for(var i = 0; i < array.length; i += 1) {
        if(array[i][attr] === value) {
            return i;
    return -1;

var Data = [
    {id_list: 2, name: 'John', token: '123123'},
    {id_list: 1, name: 'Nick', token: '312312'}

With this, not only can you find which one contains ‘John’ but you can find which contains the token ‘312312’:

findWithAttr(Data, 'name', 'John'); // returns 0
findWithAttr(Data, 'token', '312312'); // returns 1
findWithAttr(Data, 'id_list', '10'); // returns -1

Updated function to return -1 when not found so it follows the same construct as Array.prototype.indexOf()

Related:  Can you bind arrow functions?

Solution 2:

Since the sort part is already answered. I’m just going to propose another elegant way to get the indexOf of a property in your array

Your example is:

var Data = [
    {id_list:1, name:'Nick',token:'312312'},

You can do:

var index = { return; }).indexOf('Nick'); is not available on IE7 or IE8. ES5 Compatibility

And here it is with ES6 and arrow syntax, which is even simpler:

const index = =>'Nick');

Solution 3:

If you’re fine with using ES6. Arrays now have the findIndex function. Which means you can do something like this:

const index = Data.findIndex(item => === 'John');

Solution 4:

var index = Data.findIndex(item => == "John")

Which is a simplified version of:

var index = Data.findIndex(function(item){ return == "John"})


The findIndex() method returns the index of the first element in the array that satisfies the provided testing function. Otherwise -1 is returned.

Solution 5:

If you’re having issues with IE, you could use the map() function which is supported from 9.0 onward:

var index = =>"Nick");

Solution 6:

Only way known for me is to looping through all array:

var index=-1;
for(var i=0;i<Data.length;i++)

or case insensitive:

var index=-1;
for(var i=0;i<Data.length;i++)

On result variable index contain index of object or -1 if not found.

Related:  Unicoin mining and canvas clicking [closed]