Реакция - заполнение 2D-массива случайными числами с использованием .map и .fill - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть 2D-массив в проекте React, определенный в состоянии / конструкторе, который выглядит следующим образом:

constructor(props){
    super(props);

    this.state = {
      boardHeight: 50,
      boardWidth: 30,
      iterations: 10,
      reset: false,
      alive: false,
      board: [],
      randomNum: ''
    };

    this.state.board = new Array(this.state.boardHeight).fill(new Array(this.state.boardWidth).fill(0));
  }

Позже в моей программе я хочу заполнить 2D-массив случайным числом от 0и 1. Если я использую функцию .map, я могу поместить случайное число в массив следующим образом:

  componentDidMount = () => {
    const data = this.state.board;

    // Generates Array of random numbers
    const startingBoard = data.map(Math.random)

    console.log('Starting board contains ' + startingBoard);

    // After startingBoard is working I can set state with startingBoard
    this.setState({
       board: startingBoard
    });
  }

const startingBoard = data.map(Math.random) успешно помещает случайные числа в одно измерение двумерного массива.Как мне вложить вторую функцию .map, чтобы я мог создавать случайные числа для обоих измерений этого массива?

Я использую этот массив для сетки игрового поля.Мне нужно генерировать случайные числа для любого квадрата в сетке (т.е. [0] [0], [0] [1] и т. Д.), Поэтому мне нужно иметь возможность создавать случайные числа для обоих массивов в этом 2Dмассив.

Примерно так:

 const starting - data.map((x, index) => {
                      x.map((y, index) => {
                        return Math.random;
                      })
    }) 

1 Ответ

0 голосов
/ 23 сентября 2018

.fill(new Array(this.state.boardWidth).fill(0)) заполняет все строки одним и тем же экземпляром массива, поэтому изменения в одной строке изменят все строки.map может использоваться после fill для создания отдельных массивов:

board = Array(this.state.boardHeight).fill().map(_ => 
          Array(this.state.boardWidth).fill().map(_ => Math.random() ) );  
...