Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.10.2020, 09:30
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Собрать массив
Привет. Ajax возвращает такой json
[{"sum":"40.00","title":"Еда"},{"sum":"40.00","title":"Еда"},{"sum":"100.00","title":"Акции"},{"sum":"1000.00","title":"Зарплата"},{"sum":"100.00","title":"Акции"}]

Подскажите как перебрать это дело,что бы получить массив следующего вида:
[{name:'Еда',data:[40.00,40.00]},{name:'Акции',data:[100,1000]}...]
Ответить с цитированием
  #2 (permalink)  
Старый 26.10.2020, 11:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

ureech,
<script>
let ar = [{"sum":"40.00","title":"Еда"},{"sum":"40.00","title":"Еда"},{"sum":"100.00","title":"Акции"},{"sum":"1000.00","title":"Зарплата"},{"sum":"100.00","title":"Акции"}]
let keys = {}, out = [];
ar.forEach(({title: name, sum : data}) => name in keys ? keys[name].push(data) : (data = keys[name]=[data], out.push({name, data})));
document.write(`<pre>${JSON.stringify(out, "", 1)}</pre>`)
  </script>
Ответить с цитированием
  #3 (permalink)  
Старый 26.10.2020, 12:28
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Спасибо,Так то всё верно,но не заводится), так как в моём скрипте name и data должны быть без кавычек. Они переменные.То есть так
name:"Еда",data:["40.00","40.00","40.00","40.00","40.00"]...
Ответить с цитированием
  #4 (permalink)  
Старый 26.10.2020, 12:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

Сообщение от ureech
так как в моём скрипте name и data должны быть без кавычек.
бред какой-то.
Ответить с цитированием
  #5 (permalink)  
Старый 26.10.2020, 12:43
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Да нет). Есть скрипт для графиков. И там один из параметров такой.
var series =[{name:"...",data:[10,20,...]}]
https://coderlessons.com/tutorials/b...oe-rukovodstvo
там в самом низу пример
Ответить с цитированием
  #6 (permalink)  
Старый 26.10.2020, 12:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

ureech,
переменные можно использовать, а вот кавычки будут всегда.
<script>
let name = "it_is_name", data = "it_is_data";
let ar = [{"sum":"40.00","title":"Еда"},{"sum":"40.00","title":"Еда"},{"sum":"100.00","title":"Акции"},{"sum":"1000.00","title":"Зарплата"},{"sum":"100.00","title":"Акции"}]
let keys = {}, out = [];
ar.forEach(({title, sum}) => title in keys ? keys[title].push(sum) : (sum = keys[title]=[sum], out.push({[name] : title, [data] : sum})));
document.write(`<pre>${JSON.stringify(out, "", 1)}</pre>`)
  </script>
Ответить с цитированием
  #7 (permalink)  
Старый 26.10.2020, 12:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

ureech,
может как-то правильнее сформулировать проблему?
если нужны числа, а не строки добавьте + строка 4
<script>
let ar = [{"sum":"40.00","title":"Еда"},{"sum":"40.00","title":"Еда"},{"sum":"100.00","title":"Акции"},{"sum":"1000.00","title":"Зарплата"},{"sum":"100.00","title":"Акции"}]
let keys = {}, out = [];
ar.forEach(({title: name, sum : data}) => name in keys ? keys[name].push(+data) : (data = keys[name]=[+data], out.push({name, data})));
document.write(`<pre>${JSON.stringify(out, "", 1)}</pre>`)
  </script>
Ответить с цитированием
  #8 (permalink)  
Старый 26.10.2020, 13:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

ureech,
что не так?
<!DOCTYPE html>
<html>
    <head>
        <title>Highcharts Tutorial</title>
        <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
        </script>
        <script src = "https://code.highcharts.com/highcharts.js"></script>
    </head>

    <body>
        <div id = "container" style = "width: 550px; height: 400px; margin: 0 auto"></div>
        <script language = "JavaScript">
            $(document).ready(function() {
                var title = {
                    text: 'Monthly Average Temperature'
                };
                var subtitle = {
                    text: 'Source: WorldClimate.com'
                };
                var xAxis = {
                    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
                };
                var yAxis = {
                    title: {
                        text: 'Temperature (\xB0C)'
                    },
                    plotLines: [{
                        value: 0,
                        width: 1,
                        color: '#808080'
                    }]
                };

                var tooltip = {
                    valueSuffix: '\xB0C'
                }
                var legend = {
                    layout: 'vertical',
                    align: 'right',
                    verticalAlign: 'middle',
                    borderWidth: 0
                };

var ar = [{"sum":"40.00","title":"Еда"},{"sum":"40.00","title":"Еда"},{"sum":"100.00","title":"Акции"},{"sum":"1000.00","title":"Зарплата"},{"sum":"100.00","title":"Акции"}]
var keys = {}, series = [];
ar.forEach(({title: name, sum : data}) => name in keys ? keys[name].push(+data) : (data = keys[name]=[+data], series.push({name, data})));

                var json = {};
                json.title = title;
                json.subtitle = subtitle;
                json.xAxis = xAxis;
                json.yAxis = yAxis;
                json.tooltip = tooltip;
                json.legend = legend;
                json.series = series;

                $('#container').highcharts(json);
            });
        </script>
    </body>

</html>
Ответить с цитированием
  #9 (permalink)  
Старый 26.10.2020, 13:14
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Сообщение от рони
может как-то правильнее сформулировать проблему?
Сори.Упустил).
Завелась,родная). Благодарю. Пойду разбираться).
Ответить с цитированием
  #10 (permalink)  
Старый 07.11.2020, 17:50
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Приветствую. Нашёл неувязки у себя. Помогите ещё). Суть в том, что нет привязки данных массива series[] и categories[]. Если у меня например в series[
[
  {
    "name": "Молоко",
    "data": [
      40,
      30,
      80,
      40,
      40
    ]
  },
  {
    "name": "Бензин",
    "data": [
      2000,
      1500,
      2000
    ]
  }
]

А в
categories[
  "2020-10-06",
  "2020-10-21",
  "2020-10-31",
  "2020-11-02",
  "2020-11-03",
  "2020-11-04"
]

То и оба графика начинаются с первого числа и их координаты оси Х соответствует датам по порядку, а не тем которые реально им соответствуют. Нужно как то связать это дело. Может есть какие то свойства или методы у данной библиотеки? Но я не разобрался.

Последний раз редактировалось ureech, 07.11.2020 в 17:52.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Собрать массив и записать в localstorage mav1 Events/DOM/Window 2 06.07.2016 00:23
Собрать массив из таблицы V2oD2o jQuery 4 25.04.2016 17:04
Как собрать все данные из таблицы, и отправить массив на сервер optsar AJAX и COMET 14 11.12.2015 07:58
Собрать все одинаковые классы в массив в jQuery lev-otinov jQuery 3 25.09.2013 15:55
Собрать массив из элементов DOM Fairy-Wilbury Events/DOM/Window 4 13.09.2013 17:30