ссылаются на тот же объект - PullRequest
       25

ссылаются на тот же объект

0 голосов
/ 28 октября 2019

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

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

Ответы [ 3 ]

0 голосов
/ 28 октября 2019

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

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

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

0 голосов
/ 28 октября 2019

Поскольку вам нужно использовать 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 голосов
/ 28 октября 2019

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

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