【发布时间】:2019-01-04 10:03:23
【问题描述】:
背景
我有一个表示网格的数组,格式如下:
const grid = [
[null, null, null, null, null, null, null],
[null, null, null, null, null, null, null],
[null, "®" , null, null, null, null, "®" ],
["©" , "©" , null, null, "©" , "®" , "®" ],
["®" , "®" , "®" , "©" , "®" , "©" , "©" ],
["®" , "©" , "©" , "®" , "©" , "®" , "©" ],
];
目标
我的目标是将该数组转换为以下内容:
const grid = [
{ row: 0, column: 1, value: null},
{ row: 0, column: 2, value: null},
{ row: 0, column: 3, value: null},
//... some rows after ...
{ row: 3, column: 0, value: "©"},
// etc...
];
研究
我的第一个想法是使用两个嵌套的R.map和R.chain。但是我有一个主要问题:ramda 函数确实 not 将索引作为参数(与 JavaScript 中的计数器实现不同)。
所以我相信使用 ramda 做这个练习是不可能的。
问题
有没有办法只使用 ramda 函数(没有 for 循环)来做这个练习?
【问题讨论】:
-
你考虑过使用 vanilla JS 吗?我不知道 ramda,但我很确定您可以使用 vanilla JS 获得一个干净的功能版本来获得您的预期输出。
-
如果问题是缺少索引,我认为ramdajs.com/0.21.0/docs/#addIndex 将能够通过装饰您需要的索引来提供帮助?大多数函数式语言都有类似的功能,例如 Scala 中的
zipWithIndex。 -
我不熟悉 ramda 但它也有mapObjIndexed。
标签: javascript arrays functional-programming ramda.js