Словарь эквивалентной структуры данных? - PullRequest
2 голосов
/ 24 мая 2011

Я работаю в JavaScript и хочу сохранить список установленных приближений км / миль в час.(Я не могу конвертировать программно, я работаю с внешним API, который ожидает определенные значения, поэтому он действительно должен быть словарным эквивалентом.)

В настоящее время я использую объект:

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

Переход от мили в час к километру довольно прост:

var km = KM_MPH[10];

Как найти мили в час на данном километре?Кроме того, является ли объект лучшей структурой данных для использования в JavaScript?Я больше привык к Python.

Ответы [ 5 ]

4 голосов
/ 24 мая 2011

Базовый объект 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 голос
/ 24 мая 2011

Это намного ближе к Dictionary структуре данных, так как вы можете иметь десятки элементов:

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

Тогда вы также можете использовать некоторые JavaScript Framework , такие как jQuery для фильтрации элементов:

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

alert($(element).attr("value"));
1 голос
/ 24 мая 2011

Вы можете использовать итерацию по всем записям, чтобы найти ваш ключ. В большинстве случаев для указания ключа используется dict из key => value

В качестве альтернативы вы можете иметь два списка var km = [];var mph = [];

с соответствующими индексами

0 голосов
/ 01 ноября 2013

Структура словарного эквивалента для объекта javascript будет выглядеть следующим образом:

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

Выше структура является эквивалентом

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

Надеюсь, это поможет!

0 голосов
/ 24 мая 2011

Да, объект JavaScript является правильным выбором.

Создайте второй объект для обратного поиска:

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

var mph = MPH_KM[16];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...