引用同一个对象

refer to same object

如何根据下面的棋盘设置位置?谢谢

let initialState = {
  board: [
    [-1, 1, -1, 1, -1, 1, -1, 1],
    [1, -1, 1, -1, 1, -1, 1, -1],
    [-1, 1, -1, 1, -1, 1, -1, 1],
    [0, -1, 0, -1, 0, -1, 0, -1],
    [-1, 0, -1, 0, -1, 0, -1, 0],
    [2, -1, 2, -1, 2, -1, 2, -1],
    [-1, 2, -1, 2, -1, 2, -1, 2],
    [2, -1, 2, -1, 2, -1, 2, -1]
  ],
  locations: calcLocations(self.board)
};

无法识别self.board...

使用新变量保存中间结果:

let board = [ -1, 1, etc ];
let initialState = {
    board: board,
    locations: calcLocations( board )
};

您必须使用 this 关键字,并且您必须在 {} 范围内才能发挥作用。

let initialState = {
  board: [
    ...
  ],
  locations: function() {
    return calcLocations(this.board);
  }
};

请注意,获取位置成为一个函数:initialState.locations();

既然需要用this,又不想用函数,可以用getter。在第一次调用时,getter 生成值,并将其缓存在 this._locations 上。从现在开始 getter 将 return 缓存值。

const calcLocations = JSON.stringify;

const initialState = {
  board: [
    [-1, 1, -1, 1, -1, 1, -1, 1],
    [1, -1, 1, -1, 1, -1, 1, -1],
    [-1, 1, -1, 1, -1, 1, -1, 1],
    [0, -1, 0, -1, 0, -1, 0, -1],
    [-1, 0, -1, 0, -1, 0, -1, 0],
    [2, -1, 2, -1, 2, -1, 2, -1],
    [-1, 2, -1, 2, -1, 2, -1, 2],
    [2, -1, 2, -1, 2, -1, 2, -1]
  ],
  get locations() {
    if(!this._locations) this._locations = calcLocations(this.board);
    
    return this._locations; 
  }
};

console.log(initialState.locations);