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

React映射数组生成有序嵌套无序列表无输出问题排查

问题描述

需要在React中实现有序列表(<ol>)嵌套无序列表(<ul>),将给定数组数据格式化为指定的示例展示形式。

给定输入数组

["Input: nums = [2,2,1,1,5,3,3,5] Output: 7 Explanation: For the subarray [2,2,1,1,5,3,3] of length 7, if we remove nums[4] = 5, we will get [2,2,1,1,3,3], so that each number will appear exactly twice.","Input: nums = [1,1,1,2,2,2,3,3,3,4,4,4,5] Output: 13"]

期望输出格式

1. 
Input: 
nums = [2,2,1,1,5,3,3,5]

Output:
7

Explanation:
For the subarray [2,2,1,1,5,3,3] of length 7, if we remove nums[4] = 5, we will get [2,2,1,1,3,3], so that each number will appear exactly twice.

2.
Input:
nums = [1,1,1,2,2,2,3,3,3,4,4,4,5]

Output:
13

当前尝试的代码

function formatExamples(example){
    const exampleArr = example.slice(3).split(/\S+(?=: )/g)
    exampleArr.shift()
    return exampleArr
}
...
<h5> Examples: </h5>
<ol> 
    {arrExamples.map((example, idx) => {
        <ul>
            return {formatExamples(example).map((elem, ind) =>{
                return(<li>{elem}</li>)
            })}
        </ul>
        // return(<li key={idx}> {formatExamples(example)}</li>)
    })}
</ol>

运行后页面无任何内容返回,请求解决该问题。


解决方案

问题分析

  1. map回调未返回渲染元素:arrExamples.map的回调中直接写了<ul>标签,但没有用return返回,React无法识别并渲染这部分内容。
  2. 格式解析逻辑错误:原formatExamples的切片和正则拆分逻辑无法准确拆分Input、Output、Explanation的内容,导致拆分结果不符合预期。
  3. 缺少列表项key:React列表渲染要求每个列表项必须有唯一的key属性,原代码未添加。

修正后的代码

1. 修复格式解析函数

function parseExample(exampleStr) {
    // 用正向预查正则拆分出每个模块的标识和内容
    const parts = exampleStr.split(/(?=(Input|Output|Explanation): )/);
    const result = {};
    // 遍历拆分后的数组,整理成键值对
    for (let i = 1; i < parts.length; i += 2) {
        const key = parts[i].replace(': ', '');
        const value = parts[i + 1].trim();
        result[key] = value;
    }
    return result;
}

2. 修复列表渲染代码

<h5>Examples:</h5>
<ol>
    {arrExamples.map((example, idx) => {
        const parsedData = parseExample(example);
        // 必须返回渲染元素
        return (
            <li key={idx}>
                <ul>
                    {/* 遍历解析后的模块,生成无序列表项 */}
                    {Object.entries(parsedData).map(([key, value]) => (
                        <li key={key} style={{margin: '8px 0'}}>
                            <strong>{key}:</strong>
                            {/* 让内容换行展示,贴近期望格式 */}
                            <div style={{marginTop: '4px'}}>{value}</div>
                        </li>
                    ))}
                </ul>
            </li>
        );
    })}
</ol>

说明

  • 解析逻辑优化:使用正向预查正则准确拆分每个模块的标识和内容,避免原逻辑的错误拆分。
  • 渲染逻辑修复:在arrExamples.map中明确返回嵌套的<li>和<ul>元素,确保React能正确渲染。
  • 格式与规范优化:给每个列表项添加唯一key,同时通过内联样式调整间距,让展示效果更贴近期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:37:02