字典等效数据结构?

时间:2011-05-24 14:58:38

标签: javascript data-structures dictionary

我正在使用JavaScript,并希望保留一组km / mph近似值。 (我无法以编程方式转换,我正在使用需要某些值的外部API,因此它确实必须是字典等效。)

目前我正在使用一个对象:

var KM_MPH = { 10: 16, 12: 20, 15: 24 };

从mph到km很容易:

var km = KM_MPH[10];

如果达到km,我如何找到mph?另外,对象是JavaScript中用于此类事物的最佳数据结构吗?我更习惯Python。

5 个答案:

答案 0 :(得分:4)

基本的JavaScript对象实际上是这里的最佳选择。要查找反向映射,您可以执行以下操作:

function mphToKM(val){
    for(var km in KM_MPH){
        if(KM_MPH[km] === val){
            return km;
        } 
    }

    return null;
}

或者,如果您预计必须进行大量查找,我建议您使用辅助JS对象作为第一个

的镜像
var mph_km = {};
for(var km in KM_MPH){
    mph_km[KM_MPH[km]] = km;
}

// mph_km[16] ==> 10

我不知道你是否真的这样做是为了每小时公里到英里每小时之间的转换...如果是这样,直接进行转换似乎更有意义,而不是依赖于哈希映射价值观。

var conversionRate = 1.609344; // kilometres per mile
function kphToMPH(val){
    return val / conversionRate ;
}

function mphToKPH(val){
    return val * conversionRate;
}

答案 1 :(得分:1)

您可以对所有条目使用迭代来查找您的密钥 大多数情况下,dict用于来自key => value

或者,您可以有两个列表 var km = []; var mph = [];

与其对应的索引映射

答案 2 :(得分:1)

这更接近Dictionary数据结构,因为您可以拥有数十个元素:

var dictionary = [
    { key: 10, value: 12 },
    { key: 12, value: 20 },
    { key: 15, value: 24 }
];

然后你也可以使用像jQuery这样的 JavaScript Framework 过滤元素:

var element = $.filter(dictionary, function() {
    return $(this).attr("key") == 10;
});

alert($(element).attr("value"));

答案 3 :(得分:0)

是的,JavaScript对象是正确的选择。

创建第二个对象以进行反向查找:

var i, MPH_KM = {};
for(i in KM_MPH) MPH_KM[KM_MPH[i]] = i;

var mph = MPH_KM[16];

答案 4 :(得分:0)

javascript对象的字典等效结构如下所示:

var dictionary = { keys:[], values:[] };

以上结构相当于

Dictionary(Of Type, Type) **For VB.Net**
Dictionary<Type, Type>) **For C#.Net**

希望这有帮助!