И снова графики...
Привет. Строю гафики с помощью библиотеки 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,...]}
]
Подскажите как собрать это дело )? |
Цитата:
А циферки записать в другие массивы в нужную позицию. |
ureech,
объект нарисуйте. |
Если я правильно понял... :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))
|
ksa, да так. Только у меня что то не хочет работать.Видимо с моим объектом что то не так. Буду смотреть.
рони, что значит нарисовать? Не понял. |
Цитата:
|
Только один момент.
let total = [
{name: 'weight', data: []},
{name: 'weist', data: []}
]
тут значение name так нельзя прописать. Они заранее не известны. |
У меня Uncaught TypeError: ttl is undefined. не пойму почему. Объекты вроде одинаковые.
|
Разобрался с ошибкой.
|
Цитата:
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))
|
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>
|
ksa, ааа..,а я всё наобород пробовал).
|
рони, weight и weist заранее не известны.
|
Цитата:
|
рони, ясно.Разберусь значит. Спасибо).
|
ksa, спасибо большое).
|
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>
|
Да,ужж...Массивы(объекты) это что то. В php такая же хрень. Пока въехал,весь мозг себе вынес))).
P.S. Вот глаз, сразу заметили точки и запятые. А я только тогда,когда увидел прерывающийся график) |
| Часовой пояс GMT +3, время: 12:15. |