我在Angular控制器中使用下划线并尝试将字符串转换为具有多个属性的对象。
vm.availableGames = _.each(availableGames, function(game) {
game.name = game;
if (_.contains(user.allowed_games.games, game)) {
game.allowed = true;
} else {
game.allowed = false;
}
});
availableGames
是一系列可用游戏的字符串
allowed_games
也是一系列允许游戏的字符串
我的目标是创建一个包含所有可用游戏的对象数组(vm.availableGames
)。每个对象都有一个name属性(原始字符串)和一个允许的属性(一个布尔值)。
上述代码导致Cannot assign to read only property...
错误。如何在不遇到此错误的情况下完成我的目标?
答案 0 :(得分:2)
这应该有效:
vm.availableGames = _.map(availableGames, function(game) {
return {
name: game,
allowed: _.contains(user.allowed_games, game)
};
});
并且没有下划线:
vm.availableGames = availableGames.map(function(game) {
return {
name: game,
allowed: (user.allowed_games.indexOf(game) !== -1)
};
});
答案 1 :(得分:-1)
这不是下划线,但这会有效吗?
vm.availableGames = [];
for( game in availableGames ) {
if( allowed_games.indexOf(game) !== -1 )
vm.availableGames.push({ allowed: true, name: availableGames[game] });
else
vm.availableGames.push({ allowed: false, name: availableGames[game] });
}
for( game in allowed_games ) {
if( availableGames.indexOf(allowed_games[game]) !== -1 )
vm.availableGames.push({ allowed: true, name: allowed_games[game] });
}
编辑:使用forEach答案......
注意:仅当allowed_games中的所有内容都在availableGames中时才有效。
availableGames.forEach(function( game ) {
vm.availableGames.push({ allowed: allowed_games.indexOf(game) !== -1, name: game });
});