Reputation: 2383
I have following two arrays of objects
//references
var refs=[
{id:1, name:'John', state:'A'},
{id:2, name:'Obama', state:'P'},
{id:3, name:'Lincoln', state:'P'}
];
//items
var items=[
{ref:refs[0], detailed:true },
{ref:refs[1], detailed:false}
];
Now I want to check if items contains refs[0] . How can I do It? Of course we can do something like this
for(item:items){
if(item.ref==refs[0]){
console.log('contains');
break;
}
}
but I might have 2000 refs. Any ideas. Thank you
Upvotes: 0
Views: 108
Reputation: 39260
Not clear what the problem is here but assuming you'd like to know if a ref is in items and you need to know this for multiple refs (look it up multiple times) then you better re define your items:
//references
var refs=[
{id:1, name:'John', state:'A'},
{id:2, name:'Obama', state:'P'},
{id:3, name:'Lincoln', state:'P'}
];
//items
var items=[
{ref:refs[0], detailed:true },
{ref:refs[1], detailed:false}
];
//if you need to continiously look up a ref in items
// it's better to convert items to an object
// {"refid":{ref:..,detailed:...}}
// assuming every item has a ref and has that ref only once
// and every ref has a unique id
var i = -1,len=items.length,tmp={};
while(++i<len){
tmp[items[i].ref.id]=items[i];
}
items=tmp;
console.log("item for refs 0:",items[refs[0].id]);
console.log("item for refs 1:",items[refs[1].id]);
console.log("item for refs 2:",items[refs[2].id]);//undefined, that ref is not it items
Upvotes: 0
Reputation: 49188
You can use Array.filter()
:
console.log(get_ref_item(refs[0], items));
function get_ref_item(ref, items) {
return items.filter(function fi(item){
return ref.id == item.ref.id;
});
}
Upvotes: 2