我想将数组1与数组2进行比较,数组1具有对象数组。数组2中可用的任何项目也应该在数组1上可用。如果是这样,那么我必须将项目从数组2推到新数组,然后,我返回新创建的finalArray。
我做了代码,正如我提到的那样,它工作正常,但是,下面的代码执行了“ for循环”许多我不需要的项目。
我想避免很多循环执行。
var arr1 = [{"count":1,"name":"hitler"},{"count":1,"name":"cool"},{"count":1,"name":"cooola"},{"count":1,"name":"cute"},{"count":1,"name":"nyle"},{"count":1,"name":""},{"count":1,"name":"path"},{"count":1,"name":"root"},{"count":1,"name":"sssstag"},{"count":1,"name":"ssssu tag"},{"count":1,"name":"sutag"},{"count":1,"name":"tag2"},{"count":1,"name":"arrogant"},{"count":1,"name":"test01"},{"count":1,"name":"test10"},{"count":1,"name":"uber"},{"count":1,"name":"union"},{"count":1,"name":"assettag"},{"count":1,"name":"wire"}];
function intersect_arrays(a, b) {
var matches = [];
for ( var i = 0; i < a.length; i++ ) {
for ( var e = 0; e < b.length; e++ ) {
if ( a[i].name === b[e] ) matches.push( b[e] );
}
}
return matches;
}
var arr2 = ["hilter","arrogant","cool","uber"];
var finalArray = intersect_arrays(arr1, arr2);
console.log(finalArray);
有人帮助我以更好的方式实现这一目标吗?
最佳答案
将内部for循环替换为
var matches = a.filter( function(item){ return b.indexOf( item.name ) > -1 } );
例如
var arr1 = [{
"count": 1,
"name": "hitler"
}, {
"count": 1,
"name": "cool"
}, {
"count": 1,
"name": "cooola"
}, {
"count": 1,
"name": "cute"
}, {
"count": 1,
"name": "nyle"
}, {
"count": 1,
"name": ""
}, {
"count": 1,
"name": "path"
}, {
"count": 1,
"name": "root"
}, {
"count": 1,
"name": "sssstag"
}, {
"count": 1,
"name": "ssssu tag"
}, {
"count": 1,
"name": "sutag"
}, {
"count": 1,
"name": "tag2"
}, {
"count": 1,
"name": "arrogant"
}, {
"count": 1,
"name": "test01"
}, {
"count": 1,
"name": "test10"
}, {
"count": 1,
"name": "uber"
}, {
"count": 1,
"name": "union"
}, {
"count": 1,
"name": "assettag"
}, {
"count": 1,
"name": "wire"
}];
var arr2 = ["hilter", "arrogant", "cool", "uber"];
function intersect_arrays(a, b) {
var matches = a.filter(function(item) {
return b.indexOf(item.name) > -1
});
matches = matches.map( function(item){ return item.name } );
return matches;
}
console.log(intersect_arrays(arr1, arr2))