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

多API调用JSON合并与按自定义ID顺序提取MD5值问题

解决多JSON合并并按指定ID顺序获取MD5值的问题

我看了你遇到的问题——要从多个JSON文件里按指定ID顺序提取对应的MD5值,现在的合并逻辑出了点小问题,我来帮你修正一下。

先梳理现有代码的问题

  • js变量未初始化,直接调用concat会抛出错误
  • 没有正确将多个JSON中的posts数组合并到统一集合中
  • 后续用find遍历查找效率较低,尤其是数据量较大时

修正后的解决方案

我们可以先把所有JSON文件里的posts合并成一个数组,再创建一个ID到MD5的映射对象(大幅提升查找效率),最后按指定ID顺序提取对应的MD5值即可。

// 初始化存储所有posts的数组
const allPosts = [];
// 你指定的ID顺序
const ids = [2227726,2277,2218681,22881,6659,2236659];

// 循环获取并合并多个JSON的posts
for (let page = 1; page <= 2; page++) { // 对应你原来的page<3,改成<=2更直观
  const url = `https://some.url/to/json${page}.json`;
  const xhr = new XMLHttpRequest(); // 注意要实例化XHR对象,你原代码漏了这一步
  xhr.open('GET', url, false);
  xhr.send();
  const json = JSON.parse(xhr.responseText);
  // 将当前JSON的posts合并到allPosts中
  allPosts.push(...json.posts);
}

// 创建ID到MD5的映射对象,方便快速查找
const idToMd5 = {};
allPosts.forEach(post => {
  idToMd5[post.id] = post.file.md5;
});

// 按指定ID顺序获取对应的MD5值
const md5 = ids.map(id => idToMd5[id]);

console.log(md5); // 输出:["12","34","56","78","90","100"]

关键逻辑说明

  1. 合并posts数组:用push(...json.posts)把每个JSON里的posts元素都添加到allPosts数组中,得到所有帖子的统一集合。
  2. 创建映射对象:遍历所有帖子,把id作为键、对应的md5作为值存入idToMd5,后续查找时直接通过idToMd5[id]就能拿到结果,比每次用find遍历数组高效得多。
  3. 按顺序提取:用map遍历指定的ids数组,从映射对象中取出对应MD5,就能得到你想要的顺序结果。

另外补充:同步XHR(open第三个参数为false)在现代浏览器可能存在性能问题,甚至被部分环境限制,如果场景允许,建议改成异步方式(比如fetch+async/await),但如果必须用同步,上面的代码也能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:32:41