我正在使用React.js创建一个地牢爬虫游戏,并且正在使用Array.fill(0)来初始化棋盘。但是当我在2d数组内设置元素时,它将整个Array(列)设置为,'player'而不是单个元素。我有另一个createBoard()功能,注释掉,可以正常工作。那么,为什么会发生这种情况?如何正确使用Array.fill?
'player'
createBoard()
这是我的董事会组件:
import React, {Component} from 'react'; import Cell from './Cell'; class Board extends Component { constructor(props) { super(props); const dim = 10; let board = this.createBoard(dim, dim); this.state = { board: board, }; } createBoard = (row, col) => { return Array(row).fill(Array(col).fill(0)); } // createBoard = (rows, cols) => { // let board = []; // for (let i = 0; i < rows; i++) { // let row = []; // for (let j = 0; j < cols; j++) { // row.push(0); // } // board.push(row); // } // console.log(board); // return board; // } movePlayer = () => { } componentDidMount() { this.setPiece(this.props.player); } setPiece = (loc) => { let brd = this.state.board; const row = loc[0]; const col = loc[1]; console.log('row: '+row+' col: '+col+' ==='+brd[row][col]); brd[row][col] = 'player'; console.log('setPiece: ',brd); this.setState({board: brd}); } renderCell = (cell) => { switch(cell) { case 0: return 'floor'; case 1: return 'wall'; case 'player': return 'player'; default: return 'floor'; } } render() { return ( <div className='board'> {this.state.board.map((row, i) => { return row.map((cell, j) => { return ( <Cell key={[i, j]} loc={[i, j]} type={this.renderCell(cell)} /> ); }) })} </div> ); } } export default Board;
您可以通过Array.fill的方式填充2D数组:
let arr = Array(5).fill(0).map(x => Array(5).fill(0))