0

複数のオブジェクトを含むオブジェクトがあります。

1つのオブジェクトは次のようになります。

bracket: null
bracket_id: null
game_site: null
game_site_id: null
id: 88462
next_game_for_loser: null
next_game_for_loser_id: null
next_game_for_winner: null
next_game_for_winner_id: null
next_team_for_loser: 1
next_team_for_winner: 1
number_of_sets: 5
pool: Object
pool_id: 18739
pool_round: Object
pool_round_id: 21984
season: Object
season_id: 20167
start_time: "2013-03-04T13:00:00+01:00"
swiss_round: null
swiss_round_id: null
team_1: Object
team_1_id: 21202
team_1_score: 3
team_2: Object
team_2_id: 21206
team_2_score: 1
time_created: "2012-12-09T12:46:33.626319+00:00"
time_last_updated: "2012-12-09T12:46:33.626361+00:00"
timezone: "Europe/Amsterdam"
tournament: Object
tournament_id: 18519
winner: Object
winner_id: 21202

対戦のオブジェクト(チームID)をフィルタリングしたい

私はそのようにフィルタリングします:

var game = games.objects.filter(function (gameInfo) { 

            if (gameInfo.team_1_id == team1ID && gameInfo.team_2_id == team2ID) {
                return (gameInfo.team_1_id == team1ID && gameInfo.team_2_id == team2ID) && (inverted = 1);
            } 

            else if (gameInfo.team_1_id == team2ID && gameInfo.team_2_id  == team1ID) {
                return (gameInfo.team_1_id == team2ID && gameInfo.team_2_id  == team1ID) && (inverted = 0);
            }
        });

チームIDを設定するための2つの変数を取得しました。

var team1ID = 21206;
var team2ID = 21202;

filter関数がteamID1とteamID2に一致する特定のオブジェクトを返すようにしたい。これは次の場合にうまく機能しますが、次のgameInfo.team_1_id == team1ID && gameInfo.team_2_id == team2ID ように反転するとelse if (gameInfo.team_1_id == team2ID && gameInfo.team_2_id == team1ID)、オブジェクトgameは常に空になります...それはなぜですか?

4

1 に答える 1

2
(inverted = 0)

ここでは、比較ではなく、割り当てています。結果の値(0)は常に偽であり、フィルター関数は空のgame配列を返します。

また、inverted最初にフラグを確認し、不要な他の比較を複製しないようにする必要があります。

var game = games.objects.filter(function (gameInfo) { 
    return inverted == 1
      ? gameInfo.team_1_id == team1ID && gameInfo.team_2_id == team2ID
      : gameInfo.team_1_id == team2ID && gameInfo.team_2_id == team1ID;
});

設定する場合は、次のようになります。

var inverted;
var game = games.objects.filter(function (gameInfo) { 
    if (gameInfo.team_1_id == team1ID && gameInfo.team_2_id == team2ID) {
        inverted = 0;
        return true;
    } else if (gameInfo.team_1_id == team2ID && gameInfo.team_2_id == team1ID) {
        inverted = 1;
        return true;
    } // else
        return false;
});

// Shorter, using the comma operator:

var game = games.objects.filter(function (gameInfo) { 
    return (gameInfo.team_1_id == team1ID && gameInfo.team_2_id == team2ID && (inverted = 1, true)
        || (gameInfo.team_1_id == team2ID && gameInfo.team_2_id == team1ID && (inverted = 0, true);
});
于 2013-01-28T18:00:19.860 に答える