本文讲解如何基于一个整数数组(如 `[4,3,2,1]`)对字符串数组(如 `['a','b','c',...,'j']`)进行分段切片,并为每一段生成一个包含对应字符串元素的 `
` 容器,最终以 react 元素形式高效渲染。在 React 开发中,常需将线性数据按动态规则组织为嵌套结构。本例中,intArr 定义了每组应包含的元素数量,而 player 是待分配的字符串列表,且二者总长度严格一致(即 intArr.reduce((a,b) => a+b, 0) === player.length)。核心在于累积切片(cumulative slicing):利用累加器追踪每个分组的起始与结束索引。
首先,通过 .map() 遍历 intArr,维护一个累加变量 acc 记录已处理字符总数,每次用 player.slice(acc - len, acc) 提取当前长度 len 对应的子数组:
let intArr = [4, 3, 2, 1];
let player = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
let acc = 0;
const groups = intArr.map(len => {
const start = acc;
acc += len;
return player.slice(start, acc);
});
// groups → [['a','b','c','d'], ['e','f','g'], ['h','i'], ['j']]注意:此处使用 s
tart = acc 再 acc += len 的写法比原答案更清晰,避免 acc - len 在边界处引发理解歧义,也更符合函数式习惯。
随后,在 JSX 中两层映射即可完成渲染:外层遍历 groups 生成包裹容器
,内层遍历每个子数组渲染子 元素。务必为每一级列表项添加唯一 key(推荐使用索引,因数据结构稳定且无重排序需求):return (
<>
{groups.map((group, i) => (
{group.map((letter, j) => (
{letter}
))}
))}
>
);⚠️ 注意事项:
该模式可轻松扩展至更复杂场景,例如渲染带标题的分组卡片、生成网格行、或配合 CSS Grid 实现响应式布局分区。