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

如何按index字段对Wikipedia API返回的JSON对象排序?

按index字段排序Wikipedia API返回的pages对象

我明白你的问题了——你拿到的pages是一个以pageid为键的键值对对象,而非数组,所以直接套用数组排序的方法自然无效。下面给你一套可行的解决流程:

核心思路

先把对象中的页面对象提取为数组,排序后可以选择保留数组形式,或者重新构建成排序后的对象(保留原pageid键)。

步骤1:将pages对象转换为数组

使用Object.values()方法提取对象的所有值(也就是每个页面对象),生成一个数组:

// 假设你的API响应存储在response变量中
const pagesArray = Object.values(response.pages);

如果你的运行环境不支持Object.values(),可以用Object.keys()替代:

const pagesArray = Object.keys(response.pages).map(pageId => response.pages[pageId]);

步骤2:按index字段排序数组

使用数组的sort()方法,通过比较每个元素的index值实现排序:

// 按index升序排序(从小到大)
pagesArray.sort((pageA, pageB) => pageA.index - pageB.index);

// 如果需要降序排序(从大到小),把比较逻辑反过来即可:
// pagesArray.sort((pageA, pageB) => pageB.index - pageA.index);

步骤3(可选):转回排序后的对象

如果需要保留原有的pageid键结构,同时让对象的键按index顺序排列(ES6+的对象会保留插入顺序),可以用reduce()方法重新构建对象:

const sortedPagesObject = pagesArray.reduce((acc, page) => {
  acc[page.pageid] = page;
  return acc;
}, {});

完整示例代码

// 示例API响应
const apiResponse = {
  "pages": {
    "736": {
      "pageid": 736,
      "title": "Albert Einstein",
      "index": 2,
      // 其他字段省略
    },
    "983": {
      "pageid": 983,
      "title": "Albert Camus",
      "index": 10,
      // 其他字段省略
    },
    "46721": {
      "pageid": 46721,
      "title": "Edward VII",
      "index": 9,
      // 其他字段省略
    }
  }
};

// 转换为数组
const pagesArray = Object.values(apiResponse.pages);

// 按index升序排序
pagesArray.sort((a, b) => a.index - b.index);

// (可选)转回排序后的对象
const sortedPages = pagesArray.reduce((obj, page) => {
  obj[page.pageid] = page;
  return obj;
}, {});

// 输出结果
console.log("排序后的数组:", pagesArray);
console.log("排序后的对象:", sortedPages);

这样处理后,不管是数组形式还是对象形式,都能得到按index字段排序后的结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:34:49