В разделе здесь «Отображение прошлых ходов» у нас есть следующий код:
const moves = history.map((step, move) => {
const desc = move ?
'Go to move #' + move :
'Go to game start';
return (
<li>
<button onClick = {() => this.jumpTo(move)}>{desc}</button>
</li>
);
});
Кажется, что этот код сначала отображает встроенную переменную «step» в переменную «move», прежде чем, по сути, имеет эту логику Python:
const moves = [lambda move: const desc = move ... for move in history]
Как человек, знакомый с Python, но не с javascript, можете ли вы объяснить:
1) Переменная "step" нигде не назначается, и я не смог погуглить встроенную переменную step, так как же "step" присваивается количеству ходов игры?
2) Какова логика этого синтаксиса: (шаг, перемещение) означает первый шаг карты в перемещение, а затем выполнение лямбда-функции? Во-первых, первая часть «шаг карты в ход» для меня не имеет смысла.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Функция JavaScript Карта массива () имеет следующий синтаксис:
array.map(function(currentValue, index, arr), thisValue)
В этом случае переменная step - это ценность текущего элемента массива history, который повторяется функцией отображения. Переменная move - это показатель текущего элемента.
Обычно вы используете функцию карты, чтобы вернуть новый массив на основе исходного массива. В этом случае они повторяют историю ходов и создают новый массив элементов HTML <btn> на основе истории.
Вы можете сделать то же самое, используя forEach, вот так:
let moves = [];
history.forEach((step, move) => {
const desc = move ?
'Go to move #' + move :
'Go to game start';
moves.push(
<li>
<button onClick = {() => this.jumpTo(move)}>{desc}</button>
</li>
);
});
@ user3180 Можно! Создайте PR, используя то, что, по вашему мнению, упрощает понимание здесь
Вы можете даже возразить, что в повторении истории вообще нет необходимости, поскольку мы ничего не используем в истории в функции карты. Я думаю, что простого цикла для длины истории будет достаточно.
map - это функция, доступная для массивов. Он используется для карта всех элементов массива во что-то еще. Например, если вы хотите удвоить все элементы в массиве, вы должны:
const arr = [1, 2, 3, 4];
const newArr = arr.map(element => element * 2)
console.info(newArr);Это эквивалентно
const arr = [1, 2, 3, 4];
const newArr = [];
for (var i = 0; i < arr.length; i++) {
newArr.push(arr[i] * 2);
}
console.info(newArr);В вашем случае history - это массив. И вы сопоставляете каждый step (просто каждый элемент history) с элементом li React. Здесь нет понятия «шаг карты в ход». Кроме того, move - это просто индекс step в вашем массиве.
Кто-то должен проверить связь с обучающими, потому что называть каждое значение истории «step» очень сбивает с толку .. currentValue должен быть помечен как «квадраты», а index должен быть помечен как «step», а не currentValue как «step», а индекс как «move»