如何搜索两个数组并查找是否匹配?
How search two arrays and find if there is a match?
我有一个数组:
[{name:'blah',id:1},{name:'blah2',id:3}]
我有另一个数组:
[{type:'blah',uid:3435},{type:'blah2',uid:3}]
我想结束:
[{newname:'blah2',uidid:3}]
你可以看到我想根据id=uid的映射来匹配两者。真的很难找到一种在 js 中执行此操作的方法。我安装了 underscore
。
由于您需要一个包含使用不同键名的对象的数组,因此类似这样的方法可行。它也很容易阅读和理解,没有任何复杂的语法或逻辑。
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);
您可以用第一个数组构建哈希 [=19=],然后在第二个数组的迭代中使用它。
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);
我有一个数组:
[{name:'blah',id:1},{name:'blah2',id:3}]
我有另一个数组:
[{type:'blah',uid:3435},{type:'blah2',uid:3}]
我想结束:
[{newname:'blah2',uidid:3}]
你可以看到我想根据id=uid的映射来匹配两者。真的很难找到一种在 js 中执行此操作的方法。我安装了 underscore
。
由于您需要一个包含使用不同键名的对象的数组,因此类似这样的方法可行。它也很容易阅读和理解,没有任何复杂的语法或逻辑。
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);
您可以用第一个数组构建哈希 [=19=],然后在第二个数组的迭代中使用它。
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);