Ramda在嵌套数组中的索引

4
尝试掌握Ramda,目前感觉很不错,但我遇到了一个看起来很基础的问题(如果这是重复问题,请原谅)。我有一个数组,其中包含多个数组(表示游戏板)。
const board = [
  [4, 0, 2, 2, 0, 3, 0, 2],
  [4, 3, 3, 1, 2, 3, 4, 3],
  [4, 4, 3, 2, 4, 1, 1, 4],
  [0, 2, 4, 1, 0, 3, 2, 2],
  [4, 1, 0, 1, 2, 2, 4, 1],
  [3, 3, 4, 3, 2, 0, 1, 3],
  [2, 2, 4, 2, 2, 1, 2, 2],
  [3, 3, 2, 3, 1, 1, 2, 3]
]

玩家可以通过匹配瓷砖来构建移动,例如:
const move = [[7, 4], [7, 5], [6, 5]]

我希望将移动坐标匹配的瓦片映射到不同的值上(例如,这些坐标处的1将变为-1)。
我知道Ramda可以通过R.addIndex增强R.map:const mapWithIndex = R.map(R.addIndex)所以mapWithIndex((i, value) => // do something))能够访问每个瓦片的索引,但我不确定如何将所有参数传递到最低级别。
我甚至无法将i和j相加,尝试了以下代码:
const mapWithIndex = R.addIndex(R.map)
const addIndices = mapWithIndex((i, row) => mapWithIndex((j, tile) => j + i))

但是调用此函数会返回一个函数数组。
我错过了什么?任何帮助都将不胜感激 :)
1个回答

1

有两个问题:

  • 内部的mapWithIndex需要访问row,以便可以遍历平铺
  • 您示例代码中的值和索引参数被颠倒了

这应该可以解决:

const mapWithIndex = R.addIndex(R.map);
const addIndices = mapWithIndex((row, i) => mapWithIndex((tile, j) => j + i)(row));

太棒了,非常感谢,不知道为什么我认为索引参数是第一个。我想我的下一个问题是如何将其分解为更小的单元,可以将玩家移动数组以及i、j作为参数传递? - Andrew MacMurray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接