【发布时间】:2015-11-27 03:41:58
【问题描述】:
我正在尝试使用 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 个左右的元素,这将需要一些计算时间。另外为了避免阻塞页面,我将所有这些任务委托给了一个网络工作者。
有什么方法可以让它更快?
【问题讨论】:
-
var keys = json1.map(function (e) { return e.name; }); var common = json2.filter(function (e) { return keys.indexOf(e.name) > -1; }); -
由于第二个数组已排序,您可以使用任意数量的搜索算法来匹配名称并添加,从而将计算时间减少到对数规模。
-
如果您谈论的是 100 个元素,那么计算时间不太可能成为问题。您是否对此进行了基准测试以确保它确实是一个问题?
-
@torazaburo 你能告诉我为什么这不会是一个问题,或者你能引用一个我可以从中学习的链接。谢谢
-
您知道它是否会成为问题的方法是对其进行基准测试。假设在最坏的情况下您正在进行 100 x 100 = 10,000 次比较。假设每次比较需要一微秒。因此,所有比较都需要 10 毫秒——换句话说,您可以在 1/100 秒内完成所有 10,000 次比较。您可以根据您的特定应用程序来判断这是否是一个问题。
标签: javascript arrays