javascript - 通过 React js 从具有属性的项目列表中获取随机项目

标签 javascript reactjs random

我正在尝试从列表中随机获取一项。 到目前为止,我设法将我的列表放入一个数组中,并且我试图通过一个函数获取我需要的项目,但在我需要它的地方,它是未定义的! 我不知道我哪里错了!!!

我想在这个控制台日志中看到结果

 handleChange(event) {
    this.setState({value: event.target.value});
    var NewDictionary = this.Dictionary;
    console.log(Rand(NewDictionary));
  }

完整代码在这里:

class Application extends React.Component{
  constructor(props) {
   super(props);
   this.state = {
     value:'option2',
     button:'submit',
   };
   this.Dictionary = {
     Salam:"Hi",
     khodafez:"Bye",
     are: "Yes",
     na: "No",
     shab: "Night",
     rooz: "Day",
   }
   this.handleChange = this.handleChange.bind(this);
   this.handleSubmit = this.handleSubmit.bind(this);
 }
 handleChange(event) {
    this.setState({value: event.target.value});
    var NewDictionary = this.Dictionary;
    console.log(Rand(NewDictionary));
  }
  handleSubmit(event) {
    this.setState({button: this.state.value});
    event.preventDefault();
  }

  render(){
    return(

  <form onSubmit={this.handleSubmit}>
  <div> {this.Dictionary.Salam}  </div>
  <div className="radio">
    <label>
      <input type="radio" value={this.Dictionary.Salam}
        checked={this.state.value === this.Dictionary.Salam}
        onChange={this.handleChange} />
        {this.Dictionary.Salam}
    </label>
  </div>
  <div className="radio">
    <label>
      <input type="radio" value="option2"
        checked={this.state.value === 'option2'}
        onChange={this.handleChange} />
      Option 2
    </label>
  </div>
  <div className="radio">
    <label>
      <input type="radio" value="option3"
        checked={this.state.value === 'option3'}
        onChange={this.handleChange} />
      Option 3
    </label>
  </div>
  <div className="radio">
    <label>
      <input type="radio" value="option4"
        checked={this.state.value === 'option4'}
        onChange={this.handleChange} />
        Option 4
    </label>
  </div>
  <button onClick={this.handleSubmit} className="btn btn-default" type="submit">{this.state.button}</button>
</form>

     )
   }
}
function Rand(NewDictionary){
  let i = NewDictionary.length - 1;
  const j = Math.floor(Math.random() * i);
  return NewDictionary[j];
}
ReactDOM.render(
  <Application />,
  document.getElementById('root')
);

最佳答案

这是因为 NewDictionary 是一个对象而不是一个数组,所以试图通过索引获取一个项目是行不通的。相反,使用 Object.keys(NewDictionary) 创建键数组,然后使用随机索引获取随机键。

function Rand(NewDictionary){
  const keys = Object.keys(NewDictionary);
  let i = keys.length - 1;
  const j = Math.floor(Math.random() * i);
  return NewDictionary[keys[j]];
}

关于javascript - 通过 React js 从具有属性的项目列表中获取随机项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062074/

相关文章:

javascript - jquery 如果输入包含来自 array-child friendly global chat 的短语

javascript - Angular/Firestore - 获取由 'add' 方法创建的 ID 以用于路由器导航

javascript - Dropzone.js-Laravel | 500内部服务器错误

javascript - 当需要在不同组件之间共享 react 状态时,最好的方法是什么?

javascript - 如何初始化和使用从其他模块(使用 WebPack 和 ES6)导出的 ReactJS 类?

javascript - 如何在 TypeScript 中使用无 TypeScript React 组件?

reactjs - 当 child.shouldComponentUpdate() 返回 false 时,React useState() 钩子(Hook)不会更新状态

c++ - 当 std::uint_fast32_t 在 GCC 中为 4 字节时,std::mt19937 失败

java - 如何将数据放入整数数组

java - Random.nextInt 返回连续的相同值整数(经常)