Javascript 将图表系列数组与新数组进行比较以确定添加/删除

Javascript 将图表系列数组与新数组进行比较以确定添加/删除,javascript,arrays,knockout.js,highcharts,Javascript,Arrays,Knockout.js,Highcharts,我正在为highcharts编写一个淘汰绑定,因此我有一个highchartsseries对象的可观察数组,我希望通过使用 下面是我的bindingHandler的概要(对于非敲除部分,这是将我的ViewModel绑定到它的UI元素的位) 上面的评论是我问题的关键。此时,我有两个javascript变量 系列-当前显示的highcharts系列对象数组 valueUnwrapped-现在应该显示的highcharts系列对象数组 比较这两个数组以确定 系列阵列上哪些实例应使用 valueU

我正在为highcharts编写一个淘汰绑定,因此我有一个highcharts
series
对象的可观察数组,我希望通过使用

下面是我的
bindingHandler
的概要(对于非敲除部分,这是将我的ViewModel绑定到它的UI元素的位)

上面的评论是我问题的关键。此时,我有两个javascript变量

  • 系列
    -当前显示的highcharts系列对象数组
  • valueUnwrapped
    -现在应该显示的highcharts系列对象数组
比较这两个数组以确定

  • 系列
    阵列上哪些实例应使用
  • valueUnwrapped
    数组中应使用
如果有帮助的话,有一个有用的外观,它通过id获得一个系列,我很高兴在我的所有系列上都有一个id。这在
图表
对象上,您也将在上面的示例代码中看到

当然,我可以很懒,把图表清理干净

while(series.length > 0)
     series[0].remove(false);

然后从我的数组中再次添加它们。我想知道是否有更好的方法。

我认为,“懒惰”的方法根本就没有那么懒惰。即使您为每个系列设置了“id”,Highcharts中的
get()。如果你有10个系列,你会做10次for循环。事实上,它也会检查轴和点,所以速度不如预期的快

我会坚持

while(series.length > 0)
   series[0].remove(false);

$(valueUnwrapped).each(function(el, in){
    chart.addSeries(el, false);
});

chart.redraw();
因为这就是全部:只有两个具有良好性能的“for”循环。在检查和比较系列是否需要删除或更新,或者只是新的数据集不值得(在我看来)


我认为您可以尝试为淘汰(没有highcharts标记)创建新的问题,例如:“如何基于ID的“os”之类的东西比较两个对象数组;”

“敲除”不会为您观察更改,因此您不必手动协调?这就是我试图添加的内容;)knockout将文本绑定到文本框,项目绑定到本机的下拉列表,但是当您想要集成highcharts之类的东西时,您会编写一个序列数据数组,它是由数字、数组还是对象组成的?它是一个数组,这正是我所害怕的。如果是数字或数组,则可以将序列元素作为字符串进行比较,但比较对象要困难得多。您需要找到冒烟枪属性来识别整个对象。这可能是名称或值,具体取决于您的数据。这里没有足够的信息来明确回答…谢谢你的回答,这正是我的答案。
while(series.length > 0)
   series[0].remove(false);

$(valueUnwrapped).each(function(el, in){
    chart.addSeries(el, false);
});

chart.redraw();