我有一个2D数组(网格),它包含多个2D数组(块),用于我正在开发的游戏:
const c1 = [[1, 2],
[3, 4]]
const c2 = [[5, 6],
[7, 8]]
const c3 = [[9, 0],
[1, 2]]
const c4 = [[3, 4],
[5, 6]]
const grid_of_chunks = [[c1, c2],
[c3, c4]];
我想要将grid_of_chunks
减少/展平为:
[[1, 2, 5, 6],
[3, 4, 7, 8],
[9, 0, 3, 4],
[1, 2, 5, 6]]
我已经能够用Clojure在两行中实现一个功能性的解决方案,但是我很难理解如何将其翻译为功能性的JavaScript,并弥合两种语言中map语义的差距(JS map只接受一个数组,而Clojure的map接受多个集合…)。
目前我只做到了这一步:
function join_grid_of_chunks(gofc) {
const joined_horiz = gofc.map(
gofc_row => [].map.apply(gofc_row, [cs => [].concat.apply(cs)])
);
return [].concat.apply(joined_horiz);
}
编辑:Clojure解决方案(适用于等大小的正方形块,在任意大小的正方形网格中):
(defn join-grid-of-chunks [gofc]
(let [joined (map #(apply map concat %) gofc)]
(apply concat joined)))