javascript - React Tutorial 历史地图(step、move)
问题描述
在此处的“显示过去的动作”部分中,我们有以下代码:
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) 这个语法背后的逻辑是什么: (step, move) 意思是先映射 step 进入 move,然后执行 lambda 函数?首先,第一个“地图步入移动”部分对我来说没有意义。
解决方案
JavaScript Array map()函数具有以下语法:
array.map(function(currentValue, index, arr), thisValue)
在这种情况下,step
变量是map 函数正在迭代的数组的当前元素的值。变量是当前元素history
的索引。move
通常,您使用 map 函数根据原始数组返回一个新数组。在这种情况下,他们正在迭代移动历史并根据历史创建一个新的 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>
);
});
推荐阅读
- javascript - 如何在另一个库中更新后自动重启 Next.js 应用程序?
- loops - 循环中线性搜索的时间复杂度?
- mysql - 删除具有重复字段值的行,但在 MySQL 中保留后面的行
- node.js - 使用 nodejs 查询 Kafka 主题
- html - 使用网格或弹性框对齐标题、按钮和图像
- excel - 为什么我无法正确读取 .csv 数据,我如何编写代码只是为了选择特定的列?
- laravel - 是否有必要保护 Laravel 中的 destroy 方法免受未创建帖子的经过身份验证的用户的影响
- bash - 用 sed 替换 yaml 配置
- python - 复制没有缓存的 Keras 教程
- numpy - 将科学计数法日志文件输入到 python numpy