Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IndexOf Method for Multiple Properties in Object Array

What's the best method to get the index of an object in an object array given multiple of it's properties?

Imagine the following example array:

var array = [
    {
        color: 'red',
        shape: 'square',
        weight: 200
    },
    {
        color: 'blue',
        shape: 'circle',
        weight: 300
    },
    {
        color: 'red',
        shape: 'circle',
        weight: 100
    }
];

Now I would like to have the indexOf the object which color property is red and shape is circle which, in this example, would be 2.

Ideally the function would return the index of the object when a subset of its properties is given like {color: 'red', shape: 'circle'} and return -1 if no index is found.

like image 612
Bouke Avatar asked Sep 11 '15 12:09

Bouke


2 Answers

In ES6, there is the array method findIndex:

let index = array.findIndex(
    element => element.color === 'red' && element.shape === 'circle'
);

Until then, stick to a plain iteration:

var index = -1; // -1 if not found
for (var i = 0; i < array.length; ++i)
{
    var element = array[i];
    if (element.color === 'red' && element.shape === 'circle')
    {
        index = i;
        break;
    }
}
like image 85
GOTO 0 Avatar answered Nov 15 '22 04:11

GOTO 0


You can do this with map and combining the properties:

var index = array.map(function(o){return o.color + o.shape}).indexOf('red' + 'circle')
like image 40
ykay says Reinstate Monica Avatar answered Nov 15 '22 02:11

ykay says Reinstate Monica