如何将GitHub仓库语言字节数据转换为百分比统计结构?
解决方案
实现步骤
- 提取仓库名称列表:遍历原始数据,收集所有仓库的
repoName字段。 - 汇总语言总字节数:遍历每个仓库的语言统计,累加每种语言的字节数,同时计算所有语言的总字节数总和。
- 计算语言占比:用每种语言的总字节数除以总字节数,得到占比(保留两位小数)。
- 组装目标结构:将占比数据和仓库列表组合成要求的输出格式。
代码实现
// 原始数据 const data = [ { repoName: "Docker_Kubernetes_Labs", languages: { JavaScript: 64677, HTML: 17832, CSS: 8154, Dockerfile: 2859, }, }, { repoName: "Frontend-HTTP-MQTT-Project", languages: { JavaScript: 59038, SCSS: 4732, CSS: 4281, HTML: 1925, }, }, { repoName: "frontend-prj", languages: { JavaScript: 16730, SCSS: 5388, HTML: 1721, }, }, { repoName: "JavaProjects", languages: { Java: 42040, }, }, ]; // 数据处理函数 const processData = (inputData) => { // 提取所有仓库名称 const repositories = inputData.map(item => item.repoName); // 汇总每种语言的总字节数及全局总字节数 const languageTotals = {}; let totalBytes = 0; inputData.forEach(item => { Object.entries(item.languages).forEach(([lang, bytes]) => { languageTotals[lang] = (languageTotals[lang] || 0) + bytes; totalBytes += bytes; }); }); // 计算每种语言的占比(保留两位小数) const languages = Object.fromEntries( Object.entries(languageTotals).map(([lang, total]) => [ lang, parseFloat((total / totalBytes).toFixed(2)) ]) ); // 返回目标结构 return [ { languages, repositories } ]; }; // 执行处理并输出结果 const expected_output = processData(data); console.log(expected_output);
代码说明
- 仓库列表提取:使用
Array.map直接映射每个仓库的名称,代码简洁高效。 - 字节数汇总:通过嵌套遍历,用
Object.entries将语言对象转为键值对,逐个累加每种语言的字节数,同时统计全局总字节数。 - 占比计算:利用
Object.fromEntries和map方法,将语言总字节数转换为占比,toFixed(2)确保结果保留两位小数,符合饼图展示需求。 - 结构组装:最终将处理好的语言占比和仓库列表包装成要求的数组结构。
内容的提问来源于stack exchange,提问作者user346206
相关产品推荐
相关产品推荐

