问题描述
|
我正在使用JavaScript进行操作,并希望保留一组设置的公里/英里近似值。 (我无法以编程方式进行转换,我正在使用需要某些值的外部API,因此它确实必须等同于字典。)
目前,我正在使用一个对象:
var KM_MPH = { 10: 16,12: 20,15: 24 };
从mph到km很容易:
var km = KM_MPH[10];
给定公里数,我如何找到mph?另外,对象是在JavaScript中用于此类事情的最佳数据结构吗?我更习惯于Python。
解决方法
实际上,基本的JavaScript对象是此处的最佳选择。要查找反向映射,可以执行以下操作:
function mphToKM(val){
for(var km in KM_MPH){
if(KM_MPH[km] === val){
return km;
}
}
return null;
}
或者,如果您预计必须进行大量查找,则建议您使用辅助JS对象作为第一个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;
}
,您可以遍历所有条目来查找以找到您的密钥
通常,一个dict用于从key => value
或者,您可以有两个列表
var km = [];
var mph = [];
及其对应的索引映射
,这更接近于Dictionary
数据结构,因为您可以拥有许多元素:
var dictionary = [
{ key: 10,value: 12 },{ key: 12,value: 20 },{ key: 15,value: 24 }
];
然后,您还可以使用一些JavaScript框架(如jQuery)来过滤元素:
var element = $.filter(dictionary,function() {
return $(this).attr(\"key\") == 10;
});
alert($(element).attr(\"value\"));
,是的,JavaScript对象是正确的选择。
创建第二个对象以进行反向查找:
var i,MPH_KM = {};
for(i in KM_MPH) MPH_KM[KM_MPH[i]] = i;
var mph = MPH_KM[16];
,javascript对象的字典等效结构如下所示:
var dictionary = { keys:[],values:[] };
上面的结构相当于
Dictionary(Of Type,Type) **For VB.Net**
Dictionary<Type,Type>) **For C#.Net**
希望这可以帮助!