在.forEach循环中使用变量名

时间:2019-09-25 23:40:40

标签: javascript arrays reactjs variables

我正在使用JS / React,目前我已将数组嵌套到数组中。结构如下:

<mo stretchy="false">∑</mo>

我还具有如下定义的React状态:

const ezra = ["Patriots", "Bears", "Vikings", "Titans", "Jets", "Bengals"]
const adam = ["Chiefs", "Cowboys", "Packers", "Ravens", "Broncos", "Cardinals"]

const playerList = [ezra, adam]

我正在从React中获取数据,并使用playerList.forEach来统计每个玩家下的球队的总胜利。我想找到总数和.setState来将$ {player} Wins的值更改为总计。 IE浏览器,当我希望得到ezra团队的总冠军时:

this.state{
   ezraWins: 0
   adamWins: 0
}

以下是我认为它可能如何工作的简明示例:

this.setState({ezraWins: counter})

但是当我console.log这些变量时,我得到了:

playerList =爱国者,熊,维京人,泰坦,喷气机,孟加拉人胜利

playerVariable =爱国者,熊,维京人,泰坦,喷气机,孟加拉人

我是否有办法在playerList中提取每个数组的名称,并将其用于代码中的.setState命令?我也尝试使用窗口进行处理,但是收到一个我没有写下来的错误,可能是因为我没有将playerList和其中的每个数组都设为全局。是这样做的方法还是有更好的方法?我的理解是全局变量是禁止的。

2 个答案:

答案 0 :(得分:0)

这里的问题是您仅将播放器名称用作变量名称。

尝试像这样保存玩家名称:

const ezra = {name: "ezra", teams: ["Patriots", "Bears", "Vikings", "Titans", "Jets", "Bengals"]}

并像这样分配playerWins和playerVariable:

const playerWins = `${player.name}Wins`
const playerVariable = `${player.name}`

希望对您有帮助。

答案 1 :(得分:0)

花费了大量的工具,但是我发现了一种更好的方法,可以通过将所有数据置入状态来达到相同的结果。我的最终状态看起来像这样:

          ezra: {name: "ezra", wins: 0, 
            teams: ["Patriots", "Bears", "Vikings", "Titans", "Jets", "Bengals"]},
          adam: {name: "adam", wins: 0, 
            teams: ["Chiefs", "Cowboys", "Packers", "Ravens", "Broncos", "Cardinals"]}

根据Mike'Pomax'Kamermans的建议,我在功能开始时完整复制了this.state:

let updateState = Object.assign({}, this.state)

并这样将我的获胜总额复制到了updateState变量中:

updateState[player.name].wins = counter

其中玩家是每个玩家的状态对象的副本,即this.state.adam。引用特定的状态对象可能是比我的约定更好的方式,在约定中,我给它指定了一个与状态变量名称相同的名称prop。不过,这是我现在所知道的最好方法。

最后,在遍历所有获胜总数并将其更新为updateState之后,我使用以下命令更新了整个this.state:

this.setState(updateState)

无论如何,只要写下我如何解决这个问题,以防有人偶然发现这个试图完成我当时类似的任务的方法。我的解决方案与我原来的问题/代码有很大的出入,但我认为这是一种更好的方法。