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

时间:2016-06-21 16:02:58

标签: javascript underscore.js

我有一个数组:

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

我有另一个阵列:

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

我想最终:

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

你可以看到我希望根据id = uid的映射来匹配这两者。真的很难在js中找到一种方法。我安装了underscore

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);