假设3D矩阵以string
的形式编码,如下所示:
src = "1 0 0 1 1 1 0 0 0 0 0 1"
...其中三个空格分隔图层,两个空格分隔行,一个空格分隔列。
最终,我的目标是能够将其转换为bool
的3D矩阵:
console.log(result) // [[[1, 0, 0], [1, 1, 1]], [[0, 0, 0], [0, 0, 1]]]
如何使用纯函数方法将src
转换为获取result
?我正在使用Lodash
。
答案 0 :(得分:3)
为什么要lodash?使用JS map
src.split(" ")
.map(layer => layer.split(" ")
.map(rows => rows.split(" ")
.map(item => +item)));
// [ [ [ 1, 0, 0 ], [ 1, 1, 1 ] ], [ [ 0, 0, 0 ], [ 0, 0, 1 ] ] ]
答案 1 :(得分:1)
我最好的选择是递归功能,但事先得到了能够在单线中做到这一点的人的称赞。给出:
const src = "1 0 0 1 1 1 0 0 0 0 0 1"
我们将breakStuff/2
定义为:
function breakStuff(spaces, input) {
if (spaces.length == 0) return parseInt(input)
return _.map(_.split(input, _.first(spaces)), i => breakStuff(_.tail(spaces), i))
}
用法示例:
breakStuff([' ', ' ', ' '], src)
返回:
[ [ [ 1, 0, 0 ], [ 1, 1, 1 ] ], [ [ 0, 0, 0 ], [ 0, 0, 1 ] ] ]
附录:根据您的规范 - 尽管您自己的示例使用了0
&{39}和1
- 结果应该由bool
'第为此,只需更改为以下行:
if (spaces.length == 0) return input == '1'
哪会回来:
[ [ [ true, false, false ], [ true, true, true ] ],
[ [ false, false, false ], [ false, false, true ] ] ]