Javascript字典性能问题
现在我有以下javascript字典Javascript字典性能问题,javascript,performance,search,Javascript,Performance,Search,现在我有以下javascript字典 var a = {}; a['SVG343'] = 1942; a['UAL534'] = 2153; 右边的数字代表时间,键是唯一的ID。我想让ID成为键,因为它们是唯一的。我的问题是给我一个找到相应id的时间。我要怎么做,就是检查字典中的每个条目,直到找到正确的时间,并使用当前键获取id 然而,我担心性能,我的问题是,检查字典中的每个条目(O(n))是否比任何其他方法都慢得多?您可以根据以下时间建立索引: var indexByTimes = {};
var a = {};
a['SVG343'] = 1942;
a['UAL534'] = 2153;
右边的数字代表时间,键是唯一的ID。我想让ID成为键,因为它们是唯一的。我的问题是给我一个找到相应id的时间。我要怎么做,就是检查字典中的每个条目,直到找到正确的时间,并使用当前键获取id
然而,我担心性能,我的问题是,检查字典中的每个条目(O(n))是否比任何其他方法都慢得多?您可以根据以下时间建立索引:
var indexByTimes = {};
for (var prop in a) {
if (a.hasOwnProperty(prop)) {
indexByTimes[a[prop]] = prop;
}
}
对于多个时间值,请为ID使用数组:
for (var prop in a) {
if (a.hasOwnProperty(prop)) {
if (indexByTimes.hasOwnProperty(a[prop])) {
indexByTimes[a[prop]].push(prop);
} else {
indexByTimes[a[prop]] = [prop];
}
}
}
然后,您可以使用O(1)中的
索引时间['1942']
访问与时间1942对应的所有ID。迭代字典的所有键是O(n)
。因此,通过a.items()
进行迭代也将是O(n)
。但是迭代所有键,然后查找值(即a中的(var key){x+=a[key];})是O(n*log(n)
)。因此,最好是遍历a.items()
或者只使用一个列表第一行应该是var a={}代码>由于您没有在此处使用数组,因此时间也是唯一的吗?如果没有,如果更多的ID具有相同的时间值,您会选择哪个ID?时间不是唯一的,我将获得与该时间对应的所有ID谢谢!,你是说indexByTimes[1942]
而不是indexByTimes['1942']
?@albinosnoswordfish:不,我实际上是指indexByTimes['1942']
。但两者都应该起作用()。