javascript: чистый способ конвертации валют из массива

#javascript #jquery #yahoo-finance

#javascript #jquery #yahoo-финансы

Вопрос:

Ребята! В настоящее время я написал приведенный ниже код, который преобразует одну валюту в другую, но проблема в том, что я определяю каждую и каждую валюту по одному в switch блоке,

Если у меня есть 100 валют для конвертации, мне нужно написать 100 вариантов переключения, могу ли я сделать приведенный ниже код динамичным и коротким?

 var currencies = {};

$(document).ready(function(){
    yahoo_getdata(); 
});
    function yahoo_getdata() {   
    var a = new Date();
    var b = "http://someAPIurl.com/webservice/v1/symbols/allcurrencies/quote?format=jsonamp;random="   a.getTime()   "amp;callback=?";
    $.getJSON(b, function (e) {
        if (e) {
            var i, l, r, c;
            r = e.list.resources;
            for (i = 0, l = r.length; i < l; i  = 1) {
                c = r[i].resource.fields;
                //console.log(c.name, c.price);
                switch (c.name) {
                    case "USD/EUR":
                        currencies.EUR = c.price;
                        console.log('USD/EUR = '   c.price);
                        break;
                    case "USD/USD":
                        currencies.USD = c.price;
                        console.log('USD/USD = '   c.price);
                        break;
                    case "USD/JPY":
                        currencies.JPY = c.price;
                        console.log('USD/JPY = '   c.price);
                        break;
                    case "USD/INR":
                        currencies.INR = c.price;
                        console.log('USD/INR = '   c.price);
                        break;
                }
            }
            console.log(currencies);
            //console.log(e);
            //var d = {}; 
        }
    });

}

$("#amount1").keyup(function() {
    var
    usd,
    amount1 = $('#amount1').val(),
    currency1 = $("#currency1").val(),
    currency2 = $("#currency2").val(); 

    // normalize to USD
    usd = amount1 / currencies[currency1];

    // convert to target currency
    $('#amount2').val(usd * currencies[currency2]); 
});
  

Ответ №1:

Используйте объект, который сопоставляет имя валюты с именем свойства объекта:

 var currency_map = {
    'USD/EUR': 'EUR',
    'USD/USD': 'USD',
    'USD/JPY': 'JPY',
    ...
};
  

Затем:

 for (var i = 0, l = r.length; i < l; i  ) {
    c = r[i].resource.fields;
    currencies[currency_map[c.name] || c.name] = c.price;
    console.log(c.name   ' = '   c.price);
}
  

СКРИПКА

Комментарии:

1. Спасибо! Извините, я не мог понять, что вы имеете в виду? r.length Что r здесь? было бы очень полезно, если бы вы могли предоставить небольшую текстовую информацию и скрипку для этого. — Спасибо

2. Я только что скопировал это из вашего исходного кода. Разве вы не знаете, что делает ваш собственный код?

3. r = e.list.resources;