Алгоритм преобразования JSON

0

Я много боролся с этим:

Я пытаюсь добавить некоторые цвета к карте (JQuery Vector Maps). Синтаксис для добавления цвета в страну следующий (JQuery)

$('#map').vectorMap('set', 'colors', { br: '#CCDDAA' });
$('#map').vectorMap('set', 'colors', { us: '#CCDDAA' });

Как вы можете видеть, вы можете пойти с этим подходом или следующим:

var gdpData = {"br":"#CCDDAA", "us":"#CCDDAA"};
$('#map').vectorMap('set', 'colors', gdpData);

Дело в том, что мой контроллер возвращает информацию JSON следующим образом:

[{"Id":2,"Country":"US","CountryCode":"us"},{"Id":4,"Country":"BR","CountryCode":"br"}]

У меня есть нижний регистр CountryCode, который хорош, и цвет, который я хочу установить на стороне JS, в зависимости от некоторых значений.

Это то, что я сделал: я думаю, у меня есть 2 пути,

Сначала манипулируйте JSON, чтобы он выглядел как {"br":"#CCDDAA", "us":"#CCDDAA"}; но я не знаю, как это сделать :(

Или вызовите набор цветов по строкам, однако для этого подхода требуется код страны без кавычек.

 $.ajax({
            dataType: "json",
            url: '/Statistics/GetCoutriesListed/',
            type: 'GET',
            success: function (data)
            {
                $.each([data], function (index, value)
                {
                    //This is not working of course due to quotes.
                    $('#map').vectorMap('set', 'colors', value[0].CountryCode: '#CCDDAA');
                 //And I don't know how to do this :(
                $('#map').vectorMap('set', 'colors', { JASON IN CORRECT FORMAT });

                });
            }
        });

Что может быть хорошим подходом к решению этой проблемы? Есть ли у вас какие-либо идеи или рекомендации? Я совсем не силен в JS, JQuery.

Благодарю!

  • 0
    Цвет всегда будет #CCDDAA ?
  • 1
    Просто наблюдение за вашим кодом: data уже есть и массив, так что вам не нужно использовать [] при передаче их в each .
Теги:
algorithm
asp.net-mvc

2 ответа

1
Лучший ответ

Как насчет чего-то подобного?

$.each([data], function (index, value) {
    var f = value[index].CountryCode,
        obj = {};
    obj[f] = "#CCDDAA";
    $('#map').vectorMap('set', 'colors', obj);
});
  • 0
    Вы, сэр рок! Это решило проблему. Спасибо! Просто и элегантно.
  • 0
    Нп :) рад помочь! @MRFerocius
1

Вы можете использовать map для преобразования массива объектов:

var transformedData = arr.map(function (el) {
  var obj = {};
  obj[el.Country.toLowerCase()] = '#CCDDAA';
  return obj;
});

Демо.

  • 0
    Энди! Отлично! Спасибо, это тоже отлично работает! Я выбрал display_name, так как ответил первым и работал. Я тоже пробую твой подход!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню