Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   И снова графики... (https://javascript.ru/forum/dom-window/82611-i-snova-grafiki.html)

ureech 31.05.2021 17:12

И снова графики...
 
Привет. Строю гафики с помощью библиотеки Highcharts. На входе имею такой объект.
Object { weight: (6) […], weist: (6) […] }
weight: Array(6) [ {…}, {…}, {…}, … ]
0: Object { "2021-05-01": 100 }
1: Object { "2021-05-05": "99,9" }
2: Object { "2021-05-10": 99 }
3: Object { "2021-05-15": "98,5" }
4: Object { "2021-05-20": 98 }
5: Object { "2021-05-25": 97.5 }
length: 6

weist: Array(6) [ {…}, {…}, {…}, … ]
0: Object { "2021-05-01": 100 }
1: Object { "2021-05-05": "99,9" }
2: Object { "2021-05-10": 99 }
3: Object { "2021-05-15": 98 }
4: Object { "2021-05-20": 97 }
5: Object { "2021-05-25": 96.5 }
length: 6


Для графиков мне нужны такие массивы или это строки.Не пойму. Но нужны именно в таком виде

let date = [];
let total = [];
date = ['2021-05-01','2021-05-05',...]
total = [{
name:'weight',data:[100,99,98.5,98,97,5]
},
{name:'weist',data[100,99.9,...]}
]


Подскажите как собрать это дело )?

ksa 31.05.2021 17:24

Цитата:

Сообщение от ureech
Подскажите как собрать это дело )?

Пройтись по датам... Они "скажут" номер позиции в итоговом массиве...
А циферки записать в другие массивы в нужную позицию.

рони 31.05.2021 17:32

ureech,
объект нарисуйте.

ksa 31.05.2021 18:36

Если я правильно понял... :write:

const obj = { 
	weight: [
		{ "2021-05-01": 100},
		{ "2021-05-05": "99,9"},
		{ "2021-05-10": 99},
		{ "2021-05-15": "98,5"},
		{ "2021-05-20": 98 },
		{ "2021-05-25": 97.5 },
	],
	weist: [
		{ "2021-05-01": 100},
		{ "2021-05-05": "99,9"},
		{ "2021-05-10": 99},
		{ "2021-05-15": 98},
		{ "2021-05-20": 97},
		{ "2021-05-25": 96.5}
	]
}
let date = []
let total = [
	{name: 'weight', data: []},
	{name: 'weist', data: []}
]
for (let key in obj) {
	const ttl = total.find(e => e.name === key)
	for (let i = 0; i < obj[key].length; i++) {
		const a = Object.keys(obj[key][i])
		date[i] = a[0]
		ttl.data[i] = obj[key][i][a[0]]
	}
}
alert(JSON.stringify(date) + '\n' + JSON.stringify(total))

ureech 31.05.2021 20:01

ksa, да так. Только у меня что то не хочет работать.Видимо с моим объектом что то не так. Буду смотреть.

рони, что значит нарисовать? Не понял.

ksa 31.05.2021 20:02

Цитата:

Сообщение от ureech
что значит нарисовать? Не понял.

Вот я как раз "нарисовал" тебе объект. :D

ureech 31.05.2021 20:07

Только один момент.
let total = [
	{name: 'weight', data: []},
	{name: 'weist', data: []}
]

тут значение name так нельзя прописать. Они заранее не известны.

ureech 31.05.2021 20:08

У меня Uncaught TypeError: ttl is undefined. не пойму почему. Объекты вроде одинаковые.

ureech 31.05.2021 20:16

Разобрался с ошибкой.

ksa 31.05.2021 20:25

Цитата:

Сообщение от ureech
тут значение name так нельзя прописать. Они заранее не известны.

Ясно...

const obj = { 
	weight: [
		{ "2021-05-01": 100},
		{ "2021-05-05": "99,9"},
		{ "2021-05-10": 99},
		{ "2021-05-15": "98,5"},
		{ "2021-05-20": 98 },
		{ "2021-05-25": 97.5 },
	],
	weist: [
		{ "2021-05-01": 100},
		{ "2021-05-05": "99,9"},
		{ "2021-05-10": 99},
		{ "2021-05-15": 98},
		{ "2021-05-20": 97},
		{ "2021-05-25": 96.5}
	]
}
let date = []
let total = []
for (let key in obj) {
	let ttl = {
		name: key,
		data: []
	}
	for (let i = 0; i < obj[key].length; i++) {
		const a = Object.keys(obj[key][i])
		date[i] = a[0]
		ttl.data[i] = obj[key][i][a[0]]
	}
	total.push(ttl)
}
alert(JSON.stringify(date) + '\n' + JSON.stringify(total))

рони 31.05.2021 20:27

highcharts подготовка данных
 
ureech,

<!DOCTYPE html>

<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .highcharts-figure,
        .highcharts-data-table table {
            min-width: 360px;
            max-width: 800px;
            margin: 1em auto;
        }

        .highcharts-data-table table {
            font-family: Verdana, sans-serif;
            border-collapse: collapse;
            border: 1px solid #EBEBEB;
            margin: 10px auto;
            text-align: center;
            width: 100%;
            max-width: 500px;
        }

        .highcharts-data-table caption {
            padding: 1em 0;
            font-size: 1.2em;
            color: #555;
        }

        .highcharts-data-table th {
            font-weight: 600;
            padding: 0.5em;
        }

        .highcharts-data-table td,
        .highcharts-data-table th,
        .highcharts-data-table caption {
            padding: 0.5em;
        }

        .highcharts-data-table thead tr,
        .highcharts-data-table tr:nth-child(even) {
            background: #f8f8f8;
        }

        .highcharts-data-table tr:hover {
            background: #f1f7ff;
        }
    </style>

</head>

<body>
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <figure class="highcharts-figure">
        <div id="container"></div>
    </figure>
    <script>
        let op = {
            title: {
                text: 'График'
            }
        };
        const obj = {
    weight: [
        { "2021-05-01": 100},
        { "2021-05-05": "99,9"},
        { "2021-05-10": 99},
        { "2021-05-15": "98,5"},
        { "2021-05-20": 98 },
        { "2021-05-25": 97.5 },
    ],
    weist: [
        { "2021-05-01": 100},
        { "2021-05-05": "99,9"},
        { "2021-05-10": 99},
        { "2021-05-15": 98},
        { "2021-05-20": 97},
        { "2021-05-25": 96.5}
    ]
        }
        const rep = a => typeof a == "string" ? +a.replace(",", ".") : a;
        const fn = ({ weight, weist }) => ({
            xAxis: {
                categories: weight.map(a => Object.keys(a)[0])
            },
            series: [{
                    name: 'weight',
                    data: weight.map(a => rep(Object.values(a)[0]))
                },
                {
                    name: 'weist',
                    data: weist.map(a => rep(Object.values(a)[0]))
                }
            ]
        })

        Object.assign(op, fn(obj));
        Highcharts.chart('container', op);
    </script>
</body>

</html>

ureech 31.05.2021 20:38

ksa, ааа..,а я всё наобород пробовал).

ureech 31.05.2021 20:39

рони, weight и weist заранее не известны.

рони 31.05.2021 20:56

Цитата:

Сообщение от ureech
weight и weist заранее не известны.

это не многое изменит ... )))

ureech 31.05.2021 21:20

рони, ясно.Разберусь значит. Спасибо).

ureech 31.05.2021 21:20

ksa, спасибо большое).

рони 31.05.2021 21:56

ureech,
шифровка из центра)))
<!DOCTYPE html>

<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .highcharts-figure,
        .highcharts-data-table table {
            min-width: 360px;
            max-width: 800px;
            margin: 1em auto;
        }

        .highcharts-data-table table {
            font-family: Verdana, sans-serif;
            border-collapse: collapse;
            border: 1px solid #EBEBEB;
            margin: 10px auto;
            text-align: center;
            width: 100%;
            max-width: 500px;
        }

        .highcharts-data-table caption {
            padding: 1em 0;
            font-size: 1.2em;
            color: #555;
        }

        .highcharts-data-table th {
            font-weight: 600;
            padding: 0.5em;
        }

        .highcharts-data-table td,
        .highcharts-data-table th,
        .highcharts-data-table caption {
            padding: 0.5em;
        }

        .highcharts-data-table thead tr,
        .highcharts-data-table tr:nth-child(even) {
            background: #f8f8f8;
        }

        .highcharts-data-table tr:hover {
            background: #f1f7ff;
        }
    </style>

</head>

<body>
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <figure class="highcharts-figure">
        <div id="container"></div>
    </figure>
    <script>
        let op = {
            title: {
                text: 'График'
            }
        };
        const obj = {
    weight: [
        { "2021-05-01": 100},
        { "2021-05-05": "99,9"},
        { "2021-05-10": 99},
        { "2021-05-15": "98,5"},
        { "2021-05-20": 98 },
        { "2021-05-25": 97.5 },
    ],
    weist: [
        { "2021-05-01": 100},
        { "2021-05-05": "99,9"},
        { "2021-05-10": 99},
        { "2021-05-15": 98},
        { "2021-05-20": 97},
        { "2021-05-25": 96.5}
    ]
        }
        const rep = a => typeof a == "string" ? +a.replace(",", ".") : a;
        const fn = obj => ({
            xAxis: {
                categories: Object.values(obj)[0].map(a => Object.keys(a)[0])
            },
            series: Object.entries(obj).map(([name, data]) => (data = data.map(a => rep(Object.values(a)[0])), {name, data}))
        })

        Object.assign(op, fn(obj));
        Highcharts.chart('container', op);
    </script>
</body>

</html>

ureech 01.06.2021 09:20

Да,ужж...Массивы(объекты) это что то. В php такая же хрень. Пока въехал,весь мозг себе вынес))).
P.S. Вот глаз, сразу заметили точки и запятые. А я только тогда,когда увидел прерывающийся график)


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