实习日记10:裁剪echarts图表

23 阅读2分钟

这是我写这个项目的第一个需求,大致意思就是根据输入的xy范围对图表进行裁剪,好久没用echarts了,都给忘记它是x,y一个点了,我以为是直接根据范围裁剪过滤,自由伸缩,但是忘记了如果没有其中一个值,另一个值也是不会显示的,我试了很久,才突然想起来了,所以这个过滤显示数组,不管是根据x映射y,还是根据y映射x,其实逻辑都是一样的,我们只需要保证,x,y必须是有对应的值就行了,至于多出来的,直接裁掉,因为又不会显示

所以就可以写出这样的代码(省略了大部分代码):

先判断这个范围在不在,要至少有一个判断值存在
当时这段代码还出了一个bug,因为可能会出现max值没有,但是min值为空的情况,所以后面这个代码改成了要至少有一个是数字
const hasValidRange = axisRange && (axisRange.min !== null || axisRange.max !== null);

选取其中的一个长度,因为如果显示的话一般都是成双成对的,所以随便哪一个就行
for (let i = 0; i < xD.length; i++) {
      根据上面的判断,拿到最小值(最大值的逻辑差不多就省略了),如果为null就直接结束不需要判断,这里利用了||和&&的特性,||在出现true之前一直往后取,直到出现可以转换为true的那个值,&&就是尽量往后取,直到出现可以转换为false的那个值,但是取的值是原值,而不是转换为falsetrue,这里是因为他们本身就是布尔值
      而且,这里的value必须要和后面的判断用括号放一起,而不能和前面的min一样,因为概念不同,min如果为空就相当于没有判断范围,类似于所有的数都符合,但是后面的都属于,只要有一个不满足就不符合!
      if (hasValidRange) {
        const minCheck = axisRange.min === null || (value !== null&& value !== undefined && value >= xAxisRange.min) 
        inRange = minCheck && maxCheck;
    }

}