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

如何将API返回数据转换为指定格式的JavaScript数组?

解决方法

你的核心问题是错误地用自定义Dictionary类拆分了每个字段,没有为每条数据构建完整的对象,同时异步代码的执行顺序也存在问题。完全不需要自定义Dictionary,用Array.map()就能直接完成格式转换:

正确代码示例

const url = 'http://127.0.0.1:8000/api/questions';

async function getData() {
  const response = await fetch(url);
  const data = await response.json();
  
  // 直接用map把每条数据转换成目标格式的对象
  const questions = data.map(item => ({
    id: item.id,
    question: item.question,
    options: item.option // 注意:确保API返回的item.option本身是数组,如果是字符串需要额外处理
  }));
  
  console.log(questions); // 这里就是你需要的目标数组
  return questions;
}

// 正确调用异步函数的方式
getData().then(questions => {
  // 在这里使用转换后的数组
  console.log('最终结果:', questions);
});

// 或者用自执行async函数的方式
// (async () => {
//   const questions = await getData();
//   console.log(questions);
// })();

原代码失败的原因

  1. 结构构建错误:自定义的Dictionary类每次add都会往数组里塞单独的{key, value}对象,而不是把id、question、options合并成一个完整的question对象,最终得到的是一堆零散的键值对,完全不符合目标格式。
  2. 异步顺序错误:getData是异步函数,直接data = getData()得到的是Promise对象,且console.log(dict1.datastore)会在API请求完成前执行,此时数据还未处理。
  3. 变量声明不规范:循环里的id、question、option没有用let/const声明,会变成全局变量,虽然不影响结果,但不符合JS编码规范。

额外处理提示

如果API返回的item.option不是数组(比如是逗号分隔的字符串),需要先转换为数组,例如:

options: item.option.split(',') // 假设选项是逗号分隔的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:36:26