在_.each中将字符串转换为对象

时间:2016-01-13 14:27:05

标签: javascript angularjs underscore.js

我在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...错误。如何在不遇到此错误的情况下完成我的目标?

2 个答案:

答案 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 });
});