React和Lodash新手:处理数组数据时SHOT__Goals未定义怎么解决?
如何正确引用selectedPlayers中的SHOT__Goals值并四舍五入到两位小数?
首先得点明问题核心:你的selectedPlayers是一个类数组对象(键为0、1的对象),而非单个玩家对象。你直接访问selectedPlayers.SHOT__Goals自然会返回undefined——因为这个属性属于每个子对象(比如selectedPlayers[0]、selectedPlayers[1]),并不是selectedPlayers本身的属性。另外你的原函数还有个小笔误:return goals;应该是return goal;(变量名写错了)。
下面分两种场景给你具体解决方案:
场景1:处理单个玩家的目标值
如果你想获取某一个玩家的目标值并格式化,需要先拿到对应的玩家对象,再访问SHOT__Goals:
// 传入selectedPlayers和要获取的玩家索引 const getSingleFormattedGoal = (selectedPlayers, playerIndex) => { // 先拿到对应索引的玩家对象,做空值判断避免报错 const targetPlayer = selectedPlayers[playerIndex]; if (!targetPlayer?.SHOT__Goals) return '0.00'; // 用Lodash的round做四舍五入,再用toFixed确保两位小数 return _.round(targetPlayer.SHOT__Goals, 2).toFixed(2); } // 调用示例 console.log(getSingleFormattedGoal(selectedPlayers, 0)); // 输出 "1.22" console.log(getSingleFormattedGoal(selectedPlayers, 1)); // 输出 "0.89"(注意:0.888888四舍五入两位是0.89哦)
场景2:处理所有玩家的目标值
如果要批量处理所有玩家的目标值,返回格式化后的数组或对象,可以用Lodash的map或mapValues来遍历:
// 返回格式化后的目标值数组 const getAllFormattedGoals = (selectedPlayers) => { return _.map(selectedPlayers, (player) => { // 同样做空值处理 if (!player?.SHOT__Goals) return '0.00'; return _.round(player.SHOT__Goals, 2).toFixed(2); }); } // 调用后得到 ["1.22", "0.89"] console.log(getAllFormattedGoals(selectedPlayers)); // 如果想保留原对象结构,返回格式化后的对象 const getFormattedPlayers = (selectedPlayers) => { return _.mapValues(selectedPlayers, (player) => { return { SHOT__Goals: player?.SHOT__Goals ? _.round(player.SHOT__Goals, 2).toFixed(2) : '0.00' }; }); } // 调用后得到 { 0: { SHOT__Goals: "1.22" }, 1: { SHOT__Goals: "0.89" } } console.log(getFormattedPlayers(selectedPlayers));
额外小提示
toFixed(2)返回的是字符串类型,如果需要数字类型,可以用Number()转换,比如Number(_.round(player.SHOT__Goals, 2).toFixed(2))- 记得处理空值情况(比如玩家对象不存在或者
SHOT__Goals缺失),避免代码报错
内容的提问来源于stack exchange,提问作者Tom Rudge
相关产品推荐
相关产品推荐

