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

React循环对象生成Bootstrap行时数据丢失问题求助

解决React中循环生成分组数组遗漏最后一组的问题

嘿,我一眼就看出问题所在啦!你的代码逻辑里,只有当rowCount达到3的时候才会把当前的elements数组推入rows,但循环结束后,最后一组(也就是第4-6个元素)已经存在elements里了,却没有被手动添加到rows中——因为循环已经跑完,不会再触发else分支的push操作了。

问题分析

你的characterSheet有6个属性,前3个会被正常推入rows,但处理第4个元素时,会把前3个的elements推入rows,然后重置rowCount和elements,接着添加第4个元素。之后处理第5、6个元素时,rowCount会变成2,循环结束,此时elements里已经有3个元素(第4-6个),但没有被加入rows,所以最终rows只有一组数据。

解决方案

方案一:在循环结束后补充推送剩余元素

只需要在循环外面加一段判断,把还没推送的elements加入rows即可,修改量很小:

renderCharacterSheetInfo() { 
  let rows = []; 
  let elements = []; 
  let rowCount = 0; 
  if (!this.state.loading) { 
    const characterSheet = { 
      strength: this.state.characterSheet.base_strength, 
      dexterity: this.state.characterSheet.base_dexterity, 
      agility: this.state.characterSheet.base_agility, 
      intelligence: this.state.characterSheet.base_intelligence, 
      health: this.state.characterSheet.base_health, 
      gold: this.state.characterSheet.gold, 
    }; 
    for(const key in characterSheet) { 
      if (rowCount < 3) { 
        elements.push(<div className="col-md-4" key={key}>{characterSheet[key]}</div>); 
        rowCount++; 
      } else { 
        rows.push(elements); 
        rowCount = 0; 
        elements = []; 
        elements.push(<div className="col-md-4" key={key}>{characterSheet[key]}</div>); 
        rowCount++; // 这里别忘了递增计数,不然下一个元素会重复判断
      } 
    }
    // 循环结束后,把剩余的元素组加入rows
    if (elements.length > 0) {
      rows.push(elements);
    } 
  } 
  console.log(rows); 
}

方案二:先收集所有元素再分组(更简洁推荐)

这种方法先把所有需要的React元素生成好,再用数组切片的方式分成每3个一组,逻辑更清晰,不容易出错:

renderCharacterSheetInfo() { 
  let rows = []; 
  if (!this.state.loading) { 
    const characterSheet = { 
      strength: this.state.characterSheet.base_strength, 
      dexterity: this.state.characterSheet.base_dexterity, 
      agility: this.state.characterSheet.base_agility, 
      intelligence: this.state.characterSheet.base_intelligence, 
      health: this.state.characterSheet.base_health, 
      gold: this.state.characterSheet.gold, 
    }; 
    // 先把所有属性转换成React元素数组
    const allElements = Object.entries(characterSheet).map(([key, value]) => (
      <div className="col-md-4" key={key}>{value}</div>
    ));
    // 每3个元素切分成一组,推入rows
    for (let i = 0; i < allElements.length; i += 3) {
      rows.push(allElements.slice(i, i + 3));
    }
  } 
  console.log(rows); 
}

两种方案都能解决你的问题,方案二更简洁易读,推荐使用哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:27:15