Карта истории React Tutorial (шаг, ход)

В разделе здесь «Отображение прошлых ходов» у нас есть следующий код:

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) Какова логика этого синтаксиса: (шаг, перемещение) означает первый шаг карты в перемещение, а затем выполнение лямбда-функции? Во-первых, первая часть «шаг карты в ход» для меня не имеет смысла.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
0
1 887
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Функция 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>
    );
});

Кто-то должен проверить связь с обучающими, потому что называть каждое значение истории «step» очень сбивает с толку .. currentValue должен быть помечен как «квадраты», а index должен быть помечен как «step», а не currentValue как «step», а индекс как «move»

user3180 03.01.2019 06:33

@ user3180 Можно! Создайте PR, используя то, что, по вашему мнению, упрощает понимание здесь

maazadeeb 03.01.2019 09:47

Вы можете даже возразить, что в повторении истории вообще нет необходимости, поскольку мы ничего не используем в истории в функции карты. Я думаю, что простого цикла для длины истории будет достаточно.

seth 18.10.2020 20:28

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 в вашем массиве.

Другие вопросы по теме