¿Cómo puedo configurar las ubicaciones en función de la tabla a continuación? Gracias

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

No reconoce self.board ...

0
Rik 28 oct. 2019 a las 02:01

3 respuestas

La mejor respuesta

Use una nueva variable para contener el resultado intermedio:

let board = [ -1, 1, etc ];
let initialState = {
    board: board,
    locations: calcLocations( board )
};
0
Dai 27 oct. 2019 a las 23:05

Tiene que usar la palabra clave this, y debe estar dentro del alcance {} para que funcione.

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

Tenga en cuenta que para obtener las ubicaciones se convierte en una función: initialState.locations();

0
Ibu 27 oct. 2019 a las 23:06

Como necesita usar this, pero no quiere usar una función, puede usar un captador. En la primera llamada, el captador genera el valor y lo almacena en caché en this._locations. A partir de ahora, el captador devolverá el valor almacenado en caché.

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);
0
Ori Drori 27 oct. 2019 a las 23:07