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

如何提取Fetch返回的对象数组为非对象型数组?或调整源JSON格式?

解决方案:将对象数组转换为无对象的简单数组

首先明确你的输入:经过fetch().json()处理后,你得到的是一个对象数组,每个元素是包含title和page属性的对象,示例如下:

const pagesArray = [
  {title: "People Policies", page: "people.html"},
  {title: "Client Policies", page: "client.html"}
];

根据你想要的「不含对象的简单数组(多组键值对)」需求,分两种常见场景给出方案:

1. 保留键和值的键值对数组

如果你希望每个对象的键与值以序列形式存放在子数组中(比如["title", "People Policies", "page", "people.html"]),可以结合map()和Object.entries()再做扁平化处理:

const keyValueArrays = pagesArray.map(obj => Object.entries(obj).flat());
// 最终结果:
// [
//   ["title", "People Policies", "page", "people.html"],
//   ["title", "Client Policies", "page", "client.html"]
// ]

这里Object.entries(obj)会把单个对象转成[["title", "xxx"], ["page", "xxx"]]的嵌套数组,再用flat()拉平为一维,最后通过map()遍历整个数组处理每个对象。

2. 仅保留属性值的数组

如果你只需要每个对象的属性值组成子数组(比如["People Policies", "people.html"]),直接用map()结合Object.values()即可:

const valueArrays = pagesArray.map(obj => Object.values(obj));
// 最终结果:
// [
//   ["People Policies", "people.html"],
//   ["Client Policies", "client.html"]
// ]

Object.values(obj)会直接提取对象的所有属性值并返回数组,完全适配这种场景。


关于格式化源文件的替代方案

如果你有权修改源JSON文件的结构,可以直接调整成最终需要的格式,这样fetch后无需额外处理:

  • 若想要仅存值的数组,源文件可写成:
[
  ["People Policies", "people.html"],
  ["Client Policies", "client.html"]
]
  • 若需要保留键的语义但不想嵌套在pages对象里,源文件可直接写成对象数组(也就是你现在json()处理后得到的数组):
[
  {"title": "People Policies", "page": "people.html"},
  {"title": "Client Policies", "page": "client.html"}
]

为什么你之前用Object.entries(obj)无效?

大概率是你直接对整个数组调用了Object.entries(),而非遍历数组中的每个对象。比如Object.entries(pagesArray)会返回数组索引与对应元素的键值对(比如[["0", {...}], ["1", {...}]]),这显然不是你想要的结果。正确的做法是用map()遍历数组,对每个对象单独使用Object.entries()或Object.values()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:22:29