Highcharts, как использовать переменную JavaScript в качестве источника данных серии?

Я запускаю код программной части asp.net, который создает строковую переменную, содержащую набор чисел с плавающей запятой, разделенных запятыми. Что-то вроде этого в С#

string myCString = "4.5, 3.1, 6.5, 7.0, -1.3";

Затем эта переменная попадает на веб-страницу asp.net, где она назначается переменной JavaScript:

var myJString = '<%=myCString %>';

Теперь мы входим в Highcharts, где синтаксис обычного сериала выглядит так:

series: [{
     name: 'Series1',
     data: [1.1, 3.8, 5.3, 9.8, 5.0]
       }]

Что я хотел бы сделать, так это назначить myJString в поле данных серии. Я пробовал два подхода, и оба не сработали. Решение, вероятно, тривиальное, но я далеко не программист-энтузиаст. Похоже, что суть проблемы в том, что Highcharts ожидает массив чисел, а не строку. Однако, как я понимаю, квадратные скобки в JavaScript заключаются в том, что они преобразуют все, что находится внутри, в строку?

Вот что НЕ сработало:

series: [{
     name: 'Series1',
     data: myJString    // does not work
       }]

series: [{
     name: 'Series1',
     data: myJString - 0    // does not work either
       }]

Вторая попытка была из highcharts - переменные данные вызывают блокировку браузера в ретроспективе это делает ощущение, что это не сработало, поскольку вычитание 0 из строки, которая не является просто числом, не соответствует цели.

Также имеет смысл, что первая попытка не сработала, поскольку кажется, что ей нужен массив чисел, а не строка. Теперь к моему актуальному вопросу (ам):

Могу ли я недорого преобразовать свою строку разделенных запятыми чисел с плавающей запятой в JavaScript, чтобы я мог использовать ее в поле данных, и если да, то как мне это сделать? Было бы лучше (с точки зрения производительности) сделать это в коде программной части и передать массив в JavaScript, а затем попробовать все это с массивом? Это предполагает, что myJString не является массивом с плавающей запятой, что является реальной проблемой.

Заранее спасибо за любую информацию, которую вы можете предоставить.


person Reality Extractor    schedule 22.04.2011    source источник
comment
У вас есть лишняя запятая в конце каждого списка. Не работает в некоторых браузерах.   -  person awm    schedule 22.04.2011
comment
Хороший глаз! ;) Эта запятая на самом деле является артефактом ошибки пользователя, потому что я плохо копирую и вставляю, отредактирую оригинал, чтобы удалить его, чтобы другие не запутались.   -  person Reality Extractor    schedule 22.04.2011


Ответы (3)


Попробуй это:

data: JSON.parse("[" + myJString + "]")

В основном это форматирует содержимое строки как массив JSON. Затем функция parse десериализует строку в массив JavaScript.

person Justin Ethier    schedule 22.04.2011
comment
это действительно сработало, большое спасибо, вы, сэр, ученый и джентльмен! Поскольку сейчас он работает, мне, вероятно, не имеет большого смысла пробовать это, создавая серверную часть массива, а затем передавая его из С# в массив JavaScript, избегая JSON. Однако, если я попытаюсь это сделать, используя массив на стороне сервера, я отправлю сообщение сюда и обновлю исходный вопрос тем, что я нашел. - person Reality Extractor; 22.04.2011
comment
Это действительно здорово, большое спасибо, сэр. - person Nadeesha Thilakarathne; 03.01.2015
comment
Действительно здорово. Большое спасибо - person A.A Noman; 07.06.2020

Поскольку данные являются типом массива, вы можете использовать массивы для таких значений, как

myData = [4.5, 3.1, 6.5, 7.0, -1.3];
person Rupam Datta    schedule 29.06.2012

другой простой подход — использовать функцию JavaScript String.split(), таким образом.

серия: [{имя: 'Серия1', данные: myJString.split(', ') }]

Если вы не уверены, будет ли у вас пробел после запятой или нет, используйте RegEx.

серия: [{имя: 'Серия1', данные: myJString.split(/,[\d]*/) }]

person Community    schedule 03.05.2012