【问题标题】:Mapping an index from an array of strings从字符串数组映射索引
【发布时间】:2020-09-05 16:54:49
【问题描述】:

我正在尝试编写一个从数组中返回随机句子的代码。有点像随机报价机,除了页面上同时出现 3 个不同的报价。 这是它的外观

<div className="">
          {this.state.first.map((first) => (
            <div className="">{first}</div>
          ))}
        </div>
        <div className="">
          {this.state.second.map((second) => (
            <div className="">{second}</div>
          ))}
        </div>
        <div className="">
          {this.state.third.map((third) => (
            <div className="">{third}</div>
          ))}
        </div>

我想要做的是让 map 函数只从每个数组中返回一个。我这样做了。

 {this.state.first.map((first) => (
            <div className="">{first[0]}</div>
          ))} 

这给了我每个句子的第一个字母。但是我错过了什么让它给我整个句子而不是第一个字母? 整个代码可以在这里查看 https://github.com/Imstupidpleasehelp/CovidConspiracyGenerator/blob/master/src/Slotmachine.jsx 预先感谢您的意见。
编辑澄清。当用户按下按钮时,我希望每个数组的随机索引显示到页面。我已经有一个函数可以给我一个 1 到 10 之间的随机数。我希望它能够像随机报价机一样工作。

【问题讨论】:

  • 你很可能有一个错误的方法,有一个对象而不是属性将有一个数组值

标签: javascript arrays reactjs indexing


【解决方案1】:

由于您只需要句子数组中的一个元素,因此请访问 .first.second.third 数组的索引之一,而不是尝试 .map 它们。例如:

<div>{this.state.first[0]}</div>
<div>{this.state.second[0]}</div>
<div>{this.state.third[0]}</div>

更可能的是,您希望保存当前显示的索引状态,并有类似的内容:

<div>{this.state.first[this.state.firstIndex]}</div>
<div>{this.state.second[this.state.secondIndex]}</div>
<div>{this.state.third[this.state.thirdIndex]}</div>

其中firstIndex 将是一个从0 到n - 1 的数字,其中nthis.state.first 的长度,以此类推第二个和第三个。要在 first 中选择新的随机引用,您可以:

this.setState({
  ...this.state,
  firstIndex: Math.floor(Math.random() * this.state.first.length)
});

【讨论】:

  • 感谢您的回答,您的解决方案让它不映射有效,但是我试图让它在一个可以再次调用的函数中动态映射。有什么办法可以做到吗?
  • 你的意思是什么我试图让它在一个可以再次调用的函数中动态映射,你能编辑你的问题来澄清一下吗?由于您只想要每组中的一个句子,因此使用 .map 根本没有意义 - 相反,将当前显示的索引置于状态,并调用 setState 更改为不同的索引。
  • "相反,将当前显示的索引放入状态,并调用 setState 更改为不同的索引。"我想我会这样做,这是一个更好的主意。谢谢。
猜你喜欢
  • 2021-11-15
  • 2012-01-23
  • 1970-01-01
  • 2013-06-15
  • 2020-12-12
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 2014-10-01
相关资源
最近更新 更多