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

如何将GitHub API获取的对象数组转换为JavaScript Map数组?

解决方案

问题根源

  1. fetchData 是异步函数,调用后返回的是 Promise 对象,不是直接的数组,无法直接通过 data[i] 访问元素。
  2. 原 fetchData 函数内部没有返回 fetch 的 Promise 链,导致最终拿到的 Promise 结果是 undefined。
  3. 直接用对象作为 Map 的键(map1.set(data[i], data[i].contributions))属于引用类型,后续查询不便,建议用贡献者的唯一标识(比如 login 字段)作为键。

修正后的代码

async function fetchData() {
  const token = '<GitHub Token>';
  // 返回 fetch 的 Promise 链,让外部能拿到数据
  return fetch('https://api.github.com/repos/Bitwarden/mobile/contributors', {
    headers: {
      'Authorization': `token ${token}` // GitHub Token 格式需加前缀 token
    }
  })
  .then(response => {
    if (!response.ok) {
      throw new Error(`请求失败: ${response.status}`);
    }
    return response.json();
  })
  .catch(error => {
    console.error('获取数据出错:', error);
    throw error; // 抛出错误让外部处理
  });
}

// 用 async/await 等待异步数据返回
async function processData() {
  try {
    const contributors = await fetchData();
    // 转换为 Map:以贡献者 login 为键,贡献数为值
    const contributionsMap = new Map(
      contributors.map(contributor => [contributor.login, contributor.contributions])
    );

    // 若坚持用整个对象作为键(不推荐,对象是引用类型)
    // const contributionsMap = new Map(
    //   contributors.map(contributor => [contributor, contributor.contributions])
    // );

    console.log(contributionsMap);
    // 示例:获取指定贡献者的贡献数
    console.log('bitwarden-cli 的贡献数:', contributionsMap.get('bitwarden-cli'));
  } catch (error) {
    console.error('处理数据出错:', error);
  }
}

// 执行处理函数
processData();

关键说明

  • 异步函数必须用 await 或 .then() 获取最终结果,不能直接赋值操作。
  • 用 Array.map() 将对象数组转换为 Map 所需的键值对数组,直接传入 new Map() 即可完成转换,比手动循环更简洁。

内容的提问来源于stack exchange,提问作者Chitin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:52:13