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.
3 Answers 3
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;
}
}
Comments
You can do this with map and combining the properties:
var index = array.map(function(o){return o.color + o.shape}).indexOf('red' + 'circle')
1 Comment
redc and a shape named ircle ;).you could achieve this using map array method:
var array = [
{
color: 'red',
shape: 'square',
weight: 200
},
{
color: 'blue',
shape: 'circle',
weight: 300
},
{
color: 'red',
shape: 'circle',
weight: 100
}
];
var res = array.map(function(x,i){
if( x.color == 'red')
return i;
})
//then you can filter out results to your needs
console.log(res.filter(function(x){return x != undefined}))
Comments
Explore related questions
See similar questions with these tags.
colorredis different thenshapecircle.