2016-06-21 73 views
2

我有一个数组:如何搜索两个数组并查找是否匹配?

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

我有另一个数组:

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

我想结束了:

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

你可以看到我想要的两个基于匹配在id = uid的映射上。真的很努力想在js中找到办法做到这一点。我已安装underscore

+0

PHPJS让您与功能'array_combine()'和'array_intersection()'。万岁phpjs! –

+0

你想基于'id'和'uid'进行匹配吗? – thefourtheye

+0

是的,如果这是PHP – Exitos

回答

1

你可以建立一个哈希表的第一阵列和第二阵列的重复使用。

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

1

既然你想要一个数组与对象,使用不同的键名称,这样的事情会工作。没有任何复杂的语法或逻辑,阅读和理解也很简单。

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

+0

这是正确的答案,但我从Ninas学到了更多,因为我总是在想如何使用散列图工作。 – Exitos

相关问题