嵌套数组中的Ramda索引

时间:2016-04-18 23:27:32

标签: javascript arrays currying ramda.js

到目前为止,我试图掌握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 s将变为-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 个答案:

答案 0 :(得分:1)

有两个问题:

  • 内部mapWithIndex需要访问row,因此可以遍历切片
  • 示例代码中的值和索引参数相反

这应该这样做:

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