【发布时间】:2016-04-05 18:06:17
【问题描述】:
具体来说,我有一个 ImmutableJS 地图列表,我想有条件地将记录更新为相同的值(可能包括更新所有记录)。当有人输掉游戏时,用例是在扫雷中揭示地雷。这是通过将isVisible 磁贴设置为真来完成的,如果isMine 也是真的(或者只是让每个磁贴可见,不管isMine)
所以我的 JS 架构是这样的(其中数组是列表,对象是映射):
game = {
isGameOver: false,
tiles: [
{
isMine: boolean,
isRevealed: boolean
},
...
]
}
所以我想要做的是,从game 开始,为isMine 为真的每个图块设置isRevealed 为真。
这是我想出来的,但它看起来太糟糕了,我不得不希望有另一种方法
function revealAll(game){
let revealedTiles;
revealedTiles = game.get('tiles').map(tile => {
if (tile.get('isMine')) {
tile = tile.set('isRevealed', true);
}
return tile;
});
return game.set('isGameOver', true).set('tiles', revealedTiles);
}
这成功地结束了游戏(将isGameOver 设置为真)并显示所有属于我的图块(将isRevealed 设置为真,对于isMine 等于真的每个图块),但我可以看出来它既低效又混乱。有没有内置的方法来完成我在这里所做的事情?
【问题讨论】:
-
它似乎没有什么可怕的问题,但如果你非常担心它,只需在映射列表之前使用 .withMutations 。但实际上,对于非性能关键代码中的几百个对象,似乎不值得考虑太多。
标签: javascript list dictionary immutable.js