当前位置: 首页 > news >正文

第十五届蓝桥杯国赛题 代码量统计-困难 解题思路

欢迎来到我的博客 希望我的文章能给您带来帮助!
Github
个人博客网站

文章目录

  • 1.解题思路
    • 目标1
    • 目标2
    • 目标3
  • 2.知识点

原题链接 链接

1.解题思路

目标1

请在 js/index.js 文件中补全 TODO 部分代码,实现以下目标:
fetchCodeData 函数中获取数据的代码 ,完成数据请求(请求地址必须使用提供的常量 MockUrl)并将请求获取到的数据中的数组作为函数的返回值。在 lib 目录下已经提供了 axios,考生可自行选择是否使用。
解题:

async function fetchCodeData() {
// TODO:待补充代码 目标 1
	const res = await axios.get(MockUrl);
	return res.data
}

题目提供了axios 直接调用axios发送网络请求获取数据再根据题目要求将数据返回即可。

目标2

window.onload 中补充数据转换的代码,将原始数据 rawData/ 作为分隔符的文件夹层级结构转化为用于 echarts 渲染的树状数据结构,将最终转化完成的数据赋值给 processedData 。转换过程参考下文 “原始数据说明” 一节。
解题:

window.onload = async () => {
    const dom = document.querySelector("#canvasContainer");
    const chart = echarts.init(dom);
 
    // 获取原始数据
    const rawData = await fetchCodeData();

    // 处理后的数据
    const processedData = [];
    // TODO:待补充代码 目标 2 
    rawData.forEach(data=>{
        const name = data[0]
        const value = data[1]
        let currentData = processedData
        for(let s of name.split('/')){
            let existingNode = currentData.find(node => node.name === s);
            if(!existingNode){
                existingNode = {
                    name:s,
                    value,
                    children:[]
                }
                currentData.push(existingNode)
            }
            currentData = existingNode.children
        }
    })
    console.log(processedData);
    // TODO:END
    // 绘制图表
    setChart(chart, processedData)
};

代码解释:
假如processedData = ["components/base/path",6412]
则第一次循环name的值是components/base/path
value的值是6412
currentData每次循环时都会指向根(processedData)

for(let s of name.split('/')){
	// s = components
    let existingNode = currentData.find(node => node.name === s);
    // 第一次循环 数组为空 existingNode找不到值 = undefined
        if(!existingNode){
        // 将当前数据添加到数组中
            existingNode = {
                name:s,
                value:s === name.split('/').pop() ? value : null, // 只有最后一个数据才会赋value值
                children:[]
            }
            currentData.push(existingNode)
        }
        // 并将当前的数据对象指向上面新增后的
        currentData = existingNode.children
    }
    /**
     此时数组 processedData = [
	     name:"components",
	     value:"6412",
	     children:[]
     ]
     第二次循环后数组将变成 [
	     name:"components",
	     value:"null",
	     children:[
		     name:'base',
		     value:null,
		     children:[]
	     ]
     ]
     第三次循环后数组将变成 [
	     name:"components",
	     value:"null",
	     children:[
		     name:'base',
		     value:null,
		     children:[
			     name:'path',
			     value:6412
		     ]
	     ]
     ]
     最后退出了循环 完成了当前数据(components/base/path)的数据添加
    **/

目标3

通过 formatter 设置矩形树图中每个矩形的标签,其值格式为: {路径文件夹名称}\n{代码量}行,并隐藏图中面积小于 6400 (单位:平方像素) 的矩形。

类型说明默认值
typeString图表类型, 本题固定为 treemap ,表示矩形树图。
dataArray树状结构的数组,见 “原始数据说明”。
visibleMinNumber如果某个节点的矩形的面积,小于这个数值(单位:px平方),这个节点就不显示。
labelObject本题中只关注 labelformatter 属性,formatter 为标签内容格式器,它可以是一个字符串模板,也可以是一个回调函数;支持用 \n 换行。本题目需要使用的字符串模板变量有: {b}:数据名,{c}:数据值。
解题:
series: [
            {
                name: "Code Counter",
                type: "treemap",
                data,
                itemStyle: {
                    gapWidth: 5,
                },
                visibleMin:6400,
                // TODO:待补充代码 目标 3
                label: {
                     // TODO:待补充代码 目标 3 
                     formatter:"{b}\n{c}行"
                 },
                levels: [
                    {
                        color: ["#FCB944", "#80B7C2", "#C48483", "#F0663B", "#75D180"],
                    },
                    {
                        colorSaturation: [0.35, 0.5],
                    },
                ],
            },
        ],

2.知识点

echarts,axios,vue3以及还有简单的数据结构和算法。

相关文章:

  • 【蓝桥杯】搜索算法:DFS/BFS
  • R Excel 文件:高效数据处理与可视化工具的完美结合
  • 图形裁剪算法
  • 深度学习天崩开局
  • docker 安装 awvs15
  • 计算机面试八股(自整)
  • 历年跨链合约恶意交易详解(四)——Chainswap20210711
  • 什么是EXR透视贴图 ?
  • 【云计算】打造高效容器云平台:规划、部署与架构设计
  • Linux第四章练习
  • 【Docker基础】--查阅笔记1
  • C语言中单链表操作:查找节点与删除节点
  • 滑动窗口例题
  • 通过 axios 请求回来的 HTML 字符串渲染到 Vue 界面上并添加样式
  • 五分钟快速清晰理解作用域和闭包以及封装
  • CPU 压力测试命令大全
  • 问问lua怎么写DeepSeek,,,,,
  • 基于连接池与重试机制的高效TDengine写入方案
  • IDEA 使用Maven打包时内存溢出
  • 服务器虚拟化技术深度解析:医药流通行业IT架构优化指南
  • AI赋能科学红毯,机器人与科学家在虚实之间叩问“科学精神”
  • 试点首发进口消费品检验便利化措施,上海海关与上海商务委发文
  • A股三大股指低收:汽车股领涨,大金融走弱,两市成交近1.1万亿元
  • “多规合一”改革7年成效如何?自然资源部总规划师亮成绩单
  • 政企共同发力:多地密集部署外贸企业抢抓90天政策窗口期
  • 端午小长假前夜火车票今日开抢,多个技巧提高购票成功率