gpt4 book ai didi

javascript - Highcharts 的 json 数据映射问题

转载 作者:行者123 更新时间:2023-11-30 19:04:06 31 4
gpt4 key购买 nike

我正在尝试实现 highcharts,但在正确映射 JSON 数据方面遇到困难。

fiddle : https://jsfiddle.net/AndreasBren/vux52sL4/11/


var endpoint = '/api/chart/data/'
var label = []
var start = []
var end = []
var werk = []

$.ajax({
method: 'GET',
url: endpoint,
success: function(data) {
labels = data.label
start = data.start
end = data.end
uplant = data.werk

const forstart = start;
const newstart = forstart.map((str) => {
const [year, month, date] = str.split("-");
return `${date}.${month}.${year}`;
});
// console.log(newstart); "01.01.2019"
var dates = newstart.map(function(str) {
return new Date(str);
});
var sdates_ms = dates.map(function(date) {
return date.getTime();
});

const forend = end;
const newend = forend.map((str) => {
const [year, month, date] = str.split("-");
return `${date}.${month}.${year}`;
});
// console.log(newend); // "03.01.2019"
var dates = newend.map(function(str) {
return new Date(str);
});
var edates_ms = dates.map(function(date) {
return date.getTime();
});

var obj = {}
var finalArray = []
for (var i = 1; i <= start.length; i++) {
var first = {
name: uplant[i]
}
obj = {
...obj,
...first
}
var data = {
start: sdates_ms[i - 1],
end: edates_ms[i - 1],
name: labels[i],
y: 0
}
if (obj.data) {
obj.data.push(data)
} else {
obj.data = [data]
}
finalArray.push(obj)
}
day = 1000 * 60 * 60 * 24
var chart = Highcharts.ganttChart('container', {
chart: {
spacingLeft: 1,
scrollablePlotArea: {
minWidth: 700,
scrollPositionX: 0
}
},
title: {
text: 'Gantt Visualisation'
},
subtitle: {
text: ''
},
plotOptions: {
series: {
animation: true,
dragDrop: {
draggableX: true,
draggableY: true,
dragPrecisionX: day / 3
},
dataLabels: {
enabled: false,
format: '{point.name}',
style: {
cursor: 'default',
pointerEvents: 'none'
}
},
allowPointSelect: true,
}
},
scrollbar: {
enabled: true
},
yAxis: {
type: 'category',
categories: uplant,

},
xAxis: {
currentDateIndicator: true,
},
tooltip: {
xDateFormat: '%a %b %d, %H:%M'
},

series: finalArray,
scrollbar: {
enabled: true,
barBackgroundColor: 'gray',
barBorderRadius: 7,
barBorderWidth: 0,
buttonBackgroundColor: 'gray',
buttonBorderWidth: 0,
buttonArrowColor: 'yellow',
buttonBorderRadius: 7,
rifleColor: 'yellow',
trackBackgroundColor: 'white',
trackBorderWidth: 1,
trackBorderColor: 'silver',
trackBorderRadius: 7
}
});


},
error: function(error_data) {
console.log("error")
console.log(error_data)
}
});

结果:

One row contains all plants and all orders

Row 1 > Plant 1, Plant 2, ... > Order 1, Order 2, ...

预期结果:

Each row stands for one plant and contains the orders of this plant

Row 1 > Plant 1 > Order 1
Row 2 > Plant 2 > Order 2
....

fiddle : https://jsfiddle.net/AndreasBren/vux52sL4/11/


非常感谢您的帮助!

最佳答案

您的代码中有很多困惑。所有订单都出现在第一行的主要原因是您在数据绑定(bind)循环中设置了 y:0。此外,您从 1 开始 for 循环索引,这是不必要的,会导致不需要的行为。有一种更清晰、更简单的方法来制作这样的数据对象:

labels    = ["Workorder1","Workorder2"]
start = ["2001.02.01","2002.02.10"]
end = ["2001.03.02","2002.03.10"]
uplant = ["Plant A","Plant B"]

const makeDate = str => {
const [year, month, date] = str.split(".")
return new Date(`${month}.${date}.${year}`).getTime()
}

const finalArray = start.map((s, i) => ({
name: labels[i],
start: makeDate(s),
end: makeDate(end[i]),
y: i
}))

像这样定义 yAxis:

yAxis: {
type: 'category',
categories: uplant,
min: 0,
max: uplant.length - 1
},

系列是这样的:

series: [{ data: finalArray }]

检查我的工作 fiddle :https://jsfiddle.net/lytrax/hyq206xt/26/

关于javascript - Highcharts 的 json 数据映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59174957/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com