如何将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); // })();
原代码失败的原因
- 结构构建错误:自定义的
Dictionary类每次add都会往数组里塞单独的{key, value}对象,而不是把id、question、options合并成一个完整的question对象,最终得到的是一堆零散的键值对,完全不符合目标格式。 - 异步顺序错误:
getData是异步函数,直接data = getData()得到的是Promise对象,且console.log(dict1.datastore)会在API请求完成前执行,此时数据还未处理。 - 变量声明不规范:循环里的
id、question、option没有用let/const声明,会变成全局变量,虽然不影响结果,但不符合JS编码规范。
额外处理提示
如果API返回的item.option不是数组(比如是逗号分隔的字符串),需要先转换为数组,例如:
options: item.option.split(',') // 假设选项是逗号分隔的字符串
内容的提问来源于stack exchange,提问作者Samandar
相关产品推荐
相关产品推荐

