Jumabek Alikhanov
Jumabek Alikhanov

Reputation: 2383

Javascript. Check if the Object contains object

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

Answers (2)

HMR
HMR

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

Jared Farrish
Jared Farrish

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;
    });
}

http://jsfiddle.net/5MfrT/

Upvotes: 2

Related Questions