Как я могу установить местоположения, основываясь на доске ниже? Благодарность

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

0
Rik 28 Окт 2019 в 02:01

3 ответа

Лучший ответ

Используйте новую переменную для хранения промежуточного результата:

let board = [ -1, 1, etc ];
let initialState = {
    board: board,
    locations: calcLocations( board )
};
0
Dai 27 Окт 2019 в 23:05

Вы должны использовать ключевое слово this, и вы должны находиться внутри области {}, чтобы оно работало.

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

Обратите внимание, что получение местоположений становится функцией: initialState.locations();

0
Ibu 27 Окт 2019 в 23:06

Так как вам нужно использовать this, но не хотите использовать функцию, вы можете использовать геттер. При первом вызове получатель генерирует значение и кэширует его в this._locations. С этого момента получатель будет возвращать кэшированное значение.

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 Окт 2019 в 23:07
58584100