You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:05:22