Exitos
Exitos

Reputation: 29720

How search two arrays and find if there is a match?

I have an array :

[{name:'blah',id:1},{name:'blah2',id:3}]

I have another array :

[{type:'blah',uid:3435},{type:'blah2',uid:3}]

I want to end up with :

[{newname:'blah2',uidid:3}]

You can see I want to match the two based on a mapping of id=uid. Really struggling to find a way to do this in js. I have underscore installed.

Upvotes: 2

Views: 93

Answers (2)

KevBot
KevBot

Reputation: 18888

Since you are wanting an array with an object that uses different key names, something like this will work. It is also simple to read and to understand without any complex syntax or logic.

var arr1 = [{name: 'blah', id: 1}, {name: 'blah2', id: 3}];
var arr2 = [{type: 'blah', uid: 3435}, {type: 'blah2', uid: 3}];

var arr3 = [];

arr1.forEach(function(obj1, i) {
  arr2.forEach(function(obj2) {
    if (obj1.id == obj2.uid) {
      arr3.push({newname: obj1.name, uidid: obj1.id})
    }
  })
});

console.log(arr3);

Upvotes: 1

Nina Scholz
Nina Scholz

Reputation: 386560

You could build a hash table with the first array and use it in the iteration of the second array.

var array1 = [{ name: 'blah', id: 1 }, { name: 'blah2', id: 3 }],
    array2 = [{ type: 'blah', uid: 3435 }, { type: 'blah2', uid: 3 }],
    hash = Object.create(null),
    match = [];

array1.forEach(function (a) {
    hash[a.id] = a;
});

array2.forEach(function (a) {
    hash[a.uid] && match.push({ newname: a.type, uidid: a.uid });
});

console.log(match);

Upvotes: 1

Related Questions