Array.fill和for循环创建Array有什么区别

我正在使用React.js创建一个地牢爬虫游戏,并且正在使用Array.fill(0)来初始化棋盘。但是当我在2d数组内设置元素时,它将整个Array(列)设置为,'player'而不是单个元素。我有另一个createBoard()功能,注释掉,可以正常工作。那么,为什么会发生这种情况?如何正确使用Array.fill?

这是我的董事会组件:

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))

以上是 Array.fill和for循环创建Array有什么区别 的全部内容, 来源链接: utcz.com/qa/402039.html

回到顶部