我在javascript(React.j)中编写了以下函数,它使用了for循环:
getOpponentTeam: function(playerTeamId){
var matches = this.state.matches;
var player_team = this.state.player.team.name
for (i in matches){
if (matches[i].home_team_id == playerTeamId){
var result = player_team + " vs. " + this.getTeamName( matches[i].away_team_id )
}
else if (matches[i].away_team_id == playerTeamId){
var results = this.getTeamName( matches[i].home_team_id ) + " vs. " + player_team
}
else {
var result = "Not playing"
}
return result
};
},
问题是,for循环的工作方式,大多数时候它返回“Not playing”,即使“匹配”包含满足条件的数据。这是因为for循环是短路的。
有没有办法减少匹配数组,就像你可以在ruby中做的那样,通过说match.select {| x |一些条件}?
答案 0 :(得分:1)
您的代码存在一些问题。
<强> 1。错误使用for循环。
您正在循环遍历数组,就像它是一个对象一样。您需要使用以下实现:
for ( var i = 0; i < matches.length; i++) {
if (matches[i].home_team === playerTeamId) {
// etc
}
}
<强> 2。您将在第一次迭代时返回
正如Nit在评论中指出的那样,你将在第一个循环中返回,因此无法继续。
第3。要回答你想要的问题
我不熟悉Ruby,但我认为您可能会要求UnderscoreJS中的过滤操作。