#javascript
#JavaScript
Вопрос:
Цель: Инициализировать пустую шахматную доску с каждой ячейкой таблицы, содержащей координаты (x, y), а затем заполнить начальные шахматные фигуры, обновив соответствующие ячейки шахматной доски, переименовав ключ соответствующей шахматной фигурой. Координаты (значения ключей) останутся прежними.
Проблема: возникли проблемы с изменением имен ключей пустой шахматной доски на соответствующие шахматные фигуры с помощью функции map.
1) **typeError** from pushing Vector object to an array
2) **undefined** returned from nested map function
После исследования способ изменения ключей будет использовать либо
Object.keys(MyObject).map(ключ => ({[ключ]: MyObject[ключ]}));
или
Object.entries(MyObject).map(([p, v]) => ({[p]: v}))
Однако я не смог заставить его работать, когда функция map была вложена для 2D-массива.
const BOARD = `
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
`;
const PIECES = `
rkbqibkr
pppppppp
--------
--------
--------
--------
pppppppp
rkbqibkr
`;
//class Board
static initalize(board, pieces){
let boardCoords = board.coordinates;
let pieceCoords = pieces.trim().split("n").map(l => [...l]);
let initialPieces = [];
let startBoard;
//this is to add the appropriate coordinates of where each chess piece
//is at
//the parameter 'board' that was passed is an instance of the Board
//class, where each cell had the appropriate (x, y) coordinates. The
//code was exactly the same as below, and it worked. Not sure why it's
//not working for below. OUTPUTS: typeError
this.initialPieces = pieceCoords.map((row, y) => {
return row.map((ch, x) => {
if(ch !== '-'){
this.initialPieces.push(new Vec(x, y));
}
});
});
this.startBoard = Object.entries(boardCoords).map(row, y => {
key.map(ch, x => {
if(ch !== "-"){
({ [ch]: boardCoords[y][x]});
}
});
});
return startBoard;
}}
[Попытка вставить вектор в массив]
Ошибка неперехваченного типа: не удается прочитать свойство ‘push’ неопределенного
[Попытка сопоставления с помощью .map(item, item2)]
Ошибка неперехваченной ссылки: строка не определена
[Попытка сопоставления с помощью .map(item)]
Ошибка неперехваченного типа: не удается прочитать свойство ‘0’ неопределенного
[Ожидаемый результат]
[0]: [«p»]: vec (x, y), …
Комментарии:
1. Вы поняли
initialPieces
, что было объявлено дважды? один оператор usinglet
и другая настройка лексического контекста?2. Я думаю, вам следует изменить это
this.initialPieces.push(new Vec(x, y));
на этоinitialPieces.push(new Vec(x, y));
3. Я попытался вынуть это. но он по-прежнему выдает ту же ошибку.