2016-01-13 29 views
0

我在Angular控制器中使用下劃線,並嘗試將字符串轉換爲具有多個屬性的對象。將字符串轉換爲_.each中的對象

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),它包含了所有可用的遊戲。每個對象都有一個名稱屬性(原始字符串)和一個允許的屬性(一個布爾值)。

以上代碼導致出現Cannot assign to read only property...錯誤。我將如何去完成我所瞄準的目標而不會遇到這個錯誤?

+3

'_.each'不返回任何東西。你可以使用'_.map'代替(和'return game;'在你的if/else塊之後) – Matt

+0

@Matt,我仍然遇到同樣的錯誤,因爲我仍然試圖分配屬性('name','allowed' )到一個字符串'遊戲'。但是,如果我設置一個新的空對象('var gm = {}'),然後執行'gm.name = game',它就會起作用。感謝您指點我正確的方向。 – MattDionis

回答

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

它不是下劃線,但是這個工作?

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 }); 
}); 
+0

這個答案假設ES6,不使用嚴格的相等性測試,並且不對if語句使用大括號? _sigh_ – Matt

+0

對不起,我在哪裏假設ES6?我有點急於寫下第二部分。 – birdoftheday

+0

'for..of'在答案的第一部分。 – Matt