我在我的情况下遇到了类似的问题,我想获得一个给定值的矩阵。因此,我的第一种方法是像这样填充地图。
const matrix = new Map()
const initMatrix = () => {
for (var i = 0; i < 20 ; i++)
for (var j = 0; j < 20; j++) {
matrix.set([i,j], Math.random() <= 0.1)
}
}
}
matrix.forEach((value, key) => {
if (value){
ctx.fillStyle = "rgba(255, 0, 0, 1)";
ctx.fillRect(key[0] * boxWidth, key[1] * boxHeight,boxWidth, boxHeight);
}
})
一开始一切都很顺利,但是在我多次调用initMatrix函数后,我发现我的矩阵每次调用都会增加400个条目(是bug还是feature?)。所以我四处寻找解决方案,最终找到了这个网站,里面有很多非常好的解决方案。但对我来说并不适用 :(。所以经过更多时间的努力,我找到了一个适合我的解决方案。我只需要添加JSON.stringify和JSON.parse来添加和获取映射的键。这解决了我的问题。希望这能帮助其他人。也许有更好的创建矩阵的解决方案,但这个解决方案对我来说已经足够好了 :)。感谢其他帖子在这里挽救了我的一天 :)
这是我的最终代码:
const matrix = new Map()
const initMatrix = () => {
for (var i = 0; i < 20 ; i++)
for (var j = 0; j < 20; j++) {
matrix.set(JSON.stringify([i,j]), Math.random() <= 0.1)
}
}
}
matrix.forEach((value, jsonkey) => {
if (value){
const key = JSON.parse(jsonkey)
ctx.fillStyle = "rgba(255, 0, 0, 1)";
ctx.fillRect(key[0] * boxWidth, key[1] * boxHeight,boxWidth, boxHeight);
}
})
key.split(",")[0] key.split(",")[1]
),或B. 将数组拆分并将其元素映射到彼此的子映射中,就像anko的答案+数组键映射一样... - Andrew