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

React中遍历嵌套数组 提取point?.value生成数字数组的问题

从嵌套结构提取value生成数字数组的解决方案

需求说明

需要从给定的嵌套数据结构中,提取所有point?.value生成纯数字数组,此前尝试let data = point?.value + 1的写法未达到预期。

现有数据结构

export const testData = [
  {
    "date": [
      "2016-09-0912:00:00",
      "2015-09-0913:10:00"
    ],
    "title": [
      {
        "name": 'Name 1',
        "description": [
          {
            "value": 7898
          },
          {
            "value": 7898
          }
        ]
      },
      {
        "name": 'Name 2',
        "description": [
          {
            "value": 3244
          },
          {
            "value": 4343
          }
        ]
      },
      {
        "name": 'Name 3',
        "description": [
          null,
          null
        ]
      }
    ]
  }
]

原有代码问题

你之前的多层map写法返回的是多层嵌套数组[[[7898,7898],[3244,4343],[undefined,undefined]]],不是扁平的数字数组,而且没有过滤description中null对应的无效undefined值。

修改方案

1. 单独生成纯数字数组

直接用flatMap拍平嵌套结构,再过滤有效数字即可:

const valueArray = testData
  // 拍平外层testData到title层级
  .flatMap(inner => inner.title)
  // 拍平title层级到description层级
  .flatMap(titleItem => titleItem.description)
  // 提取value,null对应返回undefined
  .map(point => point?.value)
  // 过滤出有效数字,排除undefined、null等无效项
  .filter(value => typeof value === 'number')

最终得到的valueArray为[7898, 7898, 3244, 4343],符合纯数字数组的需求。

如果需要给每个值加1,修改map逻辑即可:

.map(point => (point?.value ?? 0) + 1)

用空值合并运算符??处理null的情况,避免生成NaN。

2. 结合渲染逻辑的写法

如果需要在React组件渲染时同时使用该数组,修改后的代码如下:

<div style={{ color: 'white' }}>
Hello
{testData.map((inner, idx) => {
  // 处理单个inner节点下的value数组
  const innerValueArr = inner.title
    .flatMap(titleItem => titleItem.description)
    .map(point => point?.value)
    .filter(Number.isFinite)
  return (
    <p key={idx} style={{color: 'white'}}>
      {/* 可直接渲染数组内容,也可以使用innerValueArr做其他逻辑处理 */}
      {innerValueArr.join(', ')}
    </p>
  )
})}
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:21:02