背景
我有一个数组数组,表示具有以下格式的网格:
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 函数不将索引作为参数(与 JavaScript 中的计数器实现不同)。
所以我认为使用 ramda 做这个练习是不可能的。
问题
有没有办法只使用 ramda 函数(没有 for 循环)来完成这个练习?
最佳答案
正如评论中所讨论的:这是一个没有 ramda 的版本,但也没有任何 for 循环。
希望你会喜欢它;)
如您所见,完全可以在没有任何 for 循环的情况下执行此操作,并且没有像 ramda 或其他库这样的任何覆盖。
const grid = [
[null, null, null, null, null, null, null],
[null, null, null, null, null, null, null],
[null, "®" , null, null, null, null, "®" ],
["©" , "©" , null, null, "©" , "®" , "®" ],
["®" , "®" , "®" , "©" , "®" , "©" , "©" ],
["®" , "©" , "©" , "®" , "©" , "®" , "©" ],
];
const result = grid.reduce((r, array, i) => [...r, ...array.map((value, j) => ({row: i, column: j, value}))], []);
console.log(result);
关于javascript - 如何使用 Ramda 将数组数组转换为对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555254/