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 = {};

现在我有以下javascript字典

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']
。但两者都应该起作用()。