我正在尝试使用JavaScript探索数组,我遇到了一种情况,我希望匹配来自两个不同数组的元素。
第一个阵列:
json1=[{
name:"abc",
add:"xyz"
},{
name:"mno",
add :"xxy"
}]
第二个数组
json2=[{
name:"abc",
add:"xyz",
off:"lop"
},{
name:"rag",
add:"vrt",
off:"wwq"
},{
name:"abc",
add:"xyz",
off:"lop"
},{
name:"wal",
add:"rot",
off:"nim"
},{
name:"abc",
add:"ola",
off:"blo"
}]
两个数组都有共同的名称值(' abc')。我循环并匹配json1的每个名称值与json2的每个名称值。
为了加快速度,我按名称对第二个数组进行了排序:
json2.sort(function(x,y){
return x.name>y.name? 1 : x.name<y.name? -1 :0;
});
我仍然认为它可能没那么有用,因为如果我们在每个数组中有更多数据可能是100个元素,那么将需要一些计算时间。另外,为了避免阻止页面,我已将所有这些任务委派给Web worker。
我们有什么方法可以让它更快?
答案 0 :(得分:0)
如果您在使用循环后不关心json2的结果。
var match = [];
for(var indx in json1){
var mainItem = json1[i];
for(var mIndx = 0; mIndx < json2.length; mIndex++){
if(json2[mIndex].name === json1[indx].name){
match.push(json2.splice(mIndex, 1));
mIndex--;
}
//this else is only used when you know that your json2 array is sorted ascendingly
//by name property. this helps the time complexity.
else if(json2[mIndx].name > json1[indx].name){
break;
}
}
}
您的匹配结果将在匹配变量中。 m =第一个数组的长度,n =第二个数组的长度。 当json2被排序时,时间复杂度是(m + n)。 最坏情况的复杂性是m * n,即当json2中的所有记录都是不同的并且json2没有排序时。