如何在series:[{data: }]中传递变量值?图表未生效求解
折线图数据传递无效果的问题排查与解决
我在尝试把变量ftes(值为2,10,2,2)传入图表的series:[{data: }]中,但图表完全没反应,麻烦帮忙看看怎么改?我的代码片段是这样的:
function DreawLineChart(series, ssssss) { var ftes = []; var fte = []; for (var i in ssssss) { fte = new Array(ssssss[i]); //alert(fte); ftes.push(fte) } alert(ftes); //需在下方代码中传递该变量... }
首先啊,你这里的核心问题出在ftes的结构上!每次循环里你用new Array(ssssss[i])创建了一个新的子数组,然后把这个子数组push进ftes,最终ftes会变成二维数组(比如[[2], [10], [2], [2]]),但绝大多数图表库的series.data字段需要的是一维数组(也就是[2,10,2,2]),这就导致图表识别不了数据,自然没效果。
给你两种简单的修改方案:
方案一:直接构建一维数组(推荐)
删掉多余的fte变量,循环时直接把数值push进ftes,这样就能得到图表需要的一维结构:
function DreawLineChart(series, ssssss) { var ftes = []; for (var i in ssssss) { // 注意:如果ssssss[i]是字符串类型,记得转成数字,比如parseInt(ssssss[i]) ftes.push(ssssss[i]); } console.log(ftes); // 现在输出是[2,10,2,2] // 把ftes传入series的data字段 // 如果series是空数组,就添加新对象 series.push({ data: ftes }); // 要是series已经有预设的对象,直接赋值即可:series[0].data = ftes; }
方案二:扁平化现有二维数组
如果因为某些原因不能修改循环逻辑,那可以在最后把二维数组转成一维:
function DreawLineChart(series, ssssss) { var ftes = []; var fte = []; for (var i in ssssss) { fte = new Array(ssssss[i]); ftes.push(fte) } // 用flat()方法扁平化数组,得到一维结构 var flatFtes = ftes.flat(); console.log(flatFtes); // 输出[2,10,2,2] // 传递给series series.push({ data: flatFtes }); }
额外提醒两个细节:
- 确认
ssssss里的元素是数字类型,如果是字符串,记得用parseInt()或Number()转成数字,否则图表可能还是无法正常渲染。 - 检查
series的操作是否正确:如果series初始是空数组,用push添加带data的对象;如果已有预设的系列对象,直接给对应对象的data属性赋值即可。
这样调整后,图表应该就能正常显示数据啦!
内容的提问来源于stack exchange,提问作者Sanjay Nakate
相关产品推荐
相关产品推荐

