我正在尝试从图表中删除数据(yAxis /系列),但是我不明白为什么我的代码无法正常工作。我正在将可观察的数据从父级发送到带有图表的子级组件。我有2个有效的代码。在我看来,使用remove(true)同步forEach循环存在问题。
我的意思是。当我使用forEach()或for()循环并尝试删除yAxis时,会错过一些循环迭代,并且图表不会删除所有数据。
另一方面,如果我将setTimeout()与remove(true)一起使用,则问题已解决,并且所有操作都将删除。知道有什么问题吗?
可行代码:
this.chart.series.forEach((serie: Highcharts.Series) => {
if (!this._series.has(serie.options.id)) {
const yAxis = this.chart.get(serie.options.id) as Highcharts.Axis;
if (yAxis) {
setTimeout(() => {
yAxis.remove(true);
});
}
}
});
破损的代码:
this.chart.series.forEach((serie: Highcharts.Series) => {
if (!this._series.has(serie.options.id)) {
const yAxis = this.chart.get(serie.options.id) as Highcharts.Axis;
if (yAxis) {
yAxis.remove(true);
}
}
});
第一个正常工作。我正在寻找答案,为什么当我不使用setTimeout()时,缺少循环的迭代。同步有问题吗?
感谢您的回答。
答案 0 :(得分:1)
这是通过循环从数组中删除元素的经典问题。当您将remove
方法与redraw
参数一起使用时,数组将被重新索引。
请检查以下实时示例:http://jsfiddle.net/BlackLabel/fy97u2bv/
解决方案是向后循环:
for (var i = chart.yAxis.length-1; i >= 0; i--) {
chart.yAxis[i].remove();
}