Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Масив для google chart (https://javascript.ru/forum/dom-window/83425-masiv-dlya-google-chart.html)

ureech 04.12.2021 18:00

Масив для google chart
 
Привет. С сервера получаю массив
obj = [ "2021-10-04,45.00", "2021-10-06,45.50",...]
для графика нужно так
var data = google.visualization.arrayToDataTable([
          ['2004',  1000],
          ['2005',  1170],
          ['2006',  660],
          ['2007',  1030]
])

пример

Как получить такой массив, что бы первое значение(дата) было строкой, а второе числом?

рони 04.12.2021 18:10

ureech,
split(,) return [a, +b]

ureech 04.12.2021 18:13

Ок,спасибо,сейчас попробую.

рони 04.12.2021 18:21

Google Line Chart
 
ureech,

<html>
    <head>
        <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
        <script type="text/javascript">
            google.charts.load('current', {'packages':['corechart']});
            google.charts.setOnLoadCallback(drawChart);
            const obj = [ "2021-10-04,45.00", "2021-10-06,45.50", "2021-10-07,90.50", "2021-10-14,10.50"];
            function drawChart() {
                var data = google.visualization.arrayToDataTable([
                    ['Day', 'Sales'], ...obj.map(v => {let [a,b] = v.split(','); return [a, +b]})
                ]);

                var options = {
                    title: 'Company Performance',
                    curveType: 'function',
                    legend: { position: 'bottom' }
                };

                var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

                chart.draw(data, options);
            }
        </script>
    </head>
    <body>
        <div id="curve_chart" style="width: 900px; height: 500px"></div>
    </body>
</html>

ureech 04.12.2021 18:37

var item = [];
   var arr = [];
   var res = '';

for (let key in obj) {
    a = obj[key];
    arr = a.split(',');
    res = [arr[0],+arr[1]];
   item[key] = res;
  }


На выходе
Array(9) [ (2) […], (2) […], (2) […], (2) […], (2) […], (2) […], (2) […], (2) […], (2) […] ]
​
0: Array [ "2021-10-04", 45 ]
​
1: Array [ "2021-10-06", 45.5 ]
​
2: Array [ "2021-10-20", 40 ]
​
3: Array [ "2021-10-31", 45 ]
​
4: Array [ "2021-11-01", 45.5 ]
​
5: Array [ "2021-11-03", 40 ]
​
6: Array [ "2021-11-10", 45.5 ]
​
7: Array [ "2021-11-16", 50 ]
​
8: Array [ "2021-11-26", 45 ]
​
length: 9


График ругается,если подставляю
var data = google.visualization.arrayToDataTable([
item
        ]);

Data column(s) for axis #0 cannot be of type string×

ureech 04.12.2021 18:41

Не увидел вашего ответа,когда писал свой).

ureech 04.12.2021 18:53

А что означает троеточие?

ureech 04.12.2021 18:59

Работает только в FF. В Опере и Хроме такая ошибка
Uncaught TypeError: Cannot read properties of undefined (reading 'map')
    at drawChart (google.js:44)
    at Object.success (google.js:82)
    at c (jquery.js:2)
    at Object.fireWith [as resolveWith] (jquery.js:2)
    at l (jquery.js:2)
    at XMLHttpRequest.<anonymous> (jquery.js:2)

рони 04.12.2021 18:59

Цитата:

Сообщение от ureech
А что означает троеточие?

в данном случае это замена flat

было [[],[],[]] стало [],[],[]

ureech 04.12.2021 18:59

Понимаю, что не из за вашего кода,но как это поправить?

ureech 04.12.2021 19:00

Цитата:

Сообщение от рони
в данном случае это замена flat

Ясно

рони 04.12.2021 19:01

ureech,
могу только гадать, видимо где-то не учли асинхронность, а там где сработало был кеш.

ureech 04.12.2021 19:06

В FF график выводит, но в консоли висит ошибка
Uncaught (in promise) TypeError: obj is undefined

Вот мой код. При загрузки страницы посылается аякс,который возвращает массив
$.ajax({
    url: '/stock/charts',
    data: { 'user_id': user_id },
    success: function (res) {
      if (res != 'error') {
        var obj = JSON.parse(res);
        var obj_items = obj.items;
        drawChart(obj_items);
        var html_obj = obj.last;
        $('#html_obj').html(html_obj);
      }
    }
  });
});


Далее ваш код
function drawChart(obj) {
        
        var data = google.visualization.arrayToDataTable([
          ['Day', 'Sales'], ...obj.map(v => {let [a,b] = v.split(','); return [a, +b]})
        ]);
        
        var options = {
          title: 'Company Performance',
          curveType: 'function',
          legend: { position: 'bottom' }
        };

        var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

        chart.draw(data, options);
      }

рони 04.12.2021 19:43

Цитата:

Сообщение от ureech
который возвращает массив

если это действительно массив то никаких JSON.parse не должно быть, смотрите что у вас в в res.

voraa 05.12.2021 00:06

Цитата:

Сообщение от ureech
В FF график выводит, но в консоли висит ошибка
Uncaught (in promise) TypeError: obj is undefined

И на какую строку ругается?


Часовой пояс GMT +3, время: 10:57.