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

如何在ReactJS中正确映射数组对象,得到目标一维数组?

ReactJS数组对象映射问题:如何将嵌套数组转为一维目标数组

问题场景

定义如下数组对象:

const demo = [
  {
    a: "message",
    b: "another message",
    c: [{ ab: "inner message", cd: "another inner message" }, { ab: "inner message" ,cd: "another inner message" }],
  },
];

使用嵌套map映射:

const mapping = demo.map((i) => {
  return i.c.map((j)=>{return {ab: j.ab}});
});
console.log(mapping);

期望输出一维数组:

[ {ab: "inner message"},{ab: "inner message" } ]

实际输出嵌套数组:

[ [ {ab: "inner message"},{ab: "inner message" } ] ]

原因分析

外层的demo.map会遍历demo中的每一个元素(此处仅1个对象),每次返回的是该对象下c数组经过内层map处理后的数组,因此最终结果是一个包含单个数组的嵌套数组。

解决方法

方法1:用flat()展开嵌套数组

在map结果后调用flat(),将深度为1的嵌套数组展开为一维数组:

const mapping = demo.map((i) => {
  return i.c.map((j) => ({ ab: j.ab }));
}).flat();
console.log(mapping);

方法2:用flatMap()一步完成映射与展开

flatMap()等价于先执行map再调用深度为1的flat,代码更简洁:

const mapping = demo.flatMap((i) => {
  return i.c.map((j) => ({ ab: j.ab }));
});
console.log(mapping);

方法3:先合并所有c数组再映射

如果demo包含多个对象,可先提取所有c数组并合并,再进行映射:

const allCItems = demo.flatMap(item => item.c);
const mapping = allCItems.map(j => ({ ab: j.ab }));
console.log(mapping);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:45:29