2017-12-20 3 views
0

APIを使用して検索すると、検索に表示される重複したプレーヤーを削除しようとしています。新しい検索が始まると、プレーヤーはテーブルに留まりますが、特定のAPIには同じプレーヤーが複数重複しています。重複している別のプレイヤーがあるかどうかを確認するための隠れた方法は何でしょうか?同じ変数がすでにテーブルに入っているかどうかをチェックしてそれを削除する方法は?

あなたはテーブルが既に新しい行を追加する前に、プレイヤーのIDを持つ行が含まれているかどうかを確認することができ

function playerseachMSF() { 
 
    var searchPlayerFN = $("#searchFN").val().trim(); 
 
    var searchPlayerLN = $("#searchLN").val().trim(); 
 
    var searchedPlayer = ""; 
 

 
    //allows user to only search for last name and have fist name be optional 
 
    if (searchPlayerFN == 0) { 
 
    var searchedPlayer = searchPlayerLN; 
 
    } else { 
 
    var searchedPlayer = searchPlayerFN + "-" + searchPlayerLN; 
 
    } 
 

 
    var playerQueryURL = "https://api.mysportsfeeds.com/v1.1/pull/nfl/2017-regular/active_players.json?" + "player=" + searchedPlayer; 
 
    
 

 
    $.ajax({ 
 
    type: "GET", 
 
    url: playerQueryURL, 
 
    dataType: 'json', 
 
    async: true, 
 
    headers: { 
 
    "Authorization": "Basic " + btoa("chen" + ":" + "testing") 
 
    }, 
 
    }).done(function(response) { 
 
    console.log("PlayerSearch MSF - " + playerQueryURL); 
 

 
    var playerResults = response.activeplayers.playerentry; 
 

 
    for (var i = 0; i < playerResults.length; i++) { 
 

 
     //removes any variables with undifined results 
 
     if (playerResults[i].team !== undefined) { 
 
     var playerResults_FN = playerResults[i].player.FirstName; 
 
     var playerResults_LN = playerResults[i].player.LastName; 
 
     var playerResults_Position = playerResults[i].player.Position; 
 
     var playerResults_Team = playerResults[i].team.Name; 
 
     var playerResults_City = playerResults[i].team.City; 
 
     var playerResults_CityAbbr = playerResults[i].team.Abbreviation; 
 
     var playerResults_IMG = playerResults[i].player.officialImageSrc; 
 
     } 
 
     if (playerResults[i].player.externalMapping !== null) { 
 
     var playerResults_ID = playerResults[i].player.externalMapping.ID; 
 
     } 
 

 
     //adds players that match searched name to table 
 
     $("#tableSearchList") 
 
     .append($("<tr>") 
 
      .attr("id", playerResults_ID) 
 
      .attr("data-FN", playerResults_FN) 
 
      .attr("data-LN", playerResults_LN) 
 
      .attr("class", "players") 
 
      .append($("<td>").text(playerResults_FN + " " + playerResults_LN)) 
 
      .append($("<td>").text(playerResults_Team)) 
 
      .append($("<td>").text(playerResults_Position)) 
 
     ) //<tr> append 
 
    } //for loop 
 

 

 
    // on click for when a player is selected 
 
    $(".players").on("click", function() { 
 
     $("#resultsBox").show(); 
 
     $("#searchPanel").hide(1000); 
 

 

 

 
     var playerID = $(this).attr("id"); 
 
     var playerFN = $(this).attr("data-FN"); 
 
     var playerLN = $(this).attr("data-LN"); 
 

 
     arrestRecord(playerFN, playerLN); 
 
     playerDisplay(playerID); 
 
     displayPlayerStats(playerFN, playerLN); 
 
     playerFantasyStats(playerFN, playerLN) 
 
    })

+0

"最高" のためのあなたの基準は何ですか?速度?メンテナンス性?最低限のコードですか?後方互換性? ...? 1つの方法は、可能な重複値を配列に格納し、* indexOf *を使用して値が存在するかどうか(つまり重複しているかどうか)を確認してから使用することです。 – RobG

+0

スピードまたは最少のコード​​が最適です、ご協力ありがとうございます – Daygo27

答えて

0

ありがとうございます。

0

新しいプレイヤーを追加する前に、既存のプレーヤーの配列を追加して比較してください。

function playerseachMSF() { 
 
    var searchPlayerFN = $("#searchFN").val().trim(); 
 
    var searchPlayerLN = $("#searchLN").val().trim(); 
 
    var searchedPlayer = ""; 
 
    var alreadyPlaying = [] 
 
    //allows user to only search for last name and have fist name be optional 
 
    if (searchPlayerFN == 0) { 
 
    var searchedPlayer = searchPlayerLN; 
 
    } else { 
 
    var searchedPlayer = searchPlayerFN + "-" + searchPlayerLN; 
 
    } 
 

 
    var playerQueryURL = "https://api.mysportsfeeds.com/v1.1/pull/nfl/2017-regular/active_players.json?" + "player=" + searchedPlayer; 
 
    
 

 
    $.ajax({ 
 
    type: "GET", 
 
    url: playerQueryURL, 
 
    dataType: 'json', 
 
    async: true, 
 
    headers: { 
 
    "Authorization": "Basic " + btoa("chen" + ":" + "testing") 
 
    }, 
 
    }).done(function(response) { 
 
    console.log("PlayerSearch MSF - " + playerQueryURL); 
 

 
    var playerResults = response.activeplayers.playerentry; 
 

 
    for (var i = 0; i < playerResults.length; i++) { 
 

 
     //removes any variables with undifined results 
 
     if (playerResults[i].team !== undefined) { 
 
     var playerResults_FN = playerResults[i].player.FirstName; 
 
     var playerResults_LN = playerResults[i].player.LastName; 
 
     var playerResults_Position = playerResults[i].player.Position; 
 
     var playerResults_Team = playerResults[i].team.Name; 
 
     var playerResults_City = playerResults[i].team.City; 
 
     var playerResults_CityAbbr = playerResults[i].team.Abbreviation; 
 
     var playerResults_IMG = playerResults[i].player.officialImageSrc; 
 
     } 
 
     if (playerResults[i].player.externalMapping !== null) { 
 
     var playerResults_ID = playerResults[i].player.externalMapping.ID; 
 
     } 
 
    if(alreadyPlaying.indexOf(playerResults_ID) == -1) { 
 
     alreadyPlaying.append(playerResults_ID) 
 
     //adds players that match searched name to table 
 
     $("#tableSearchList") 
 
     .append($("<tr>") 
 
      .attr("id", playerResults_ID) 
 
      .attr("data-FN", playerResults_FN) 
 
      .attr("data-LN", playerResults_LN) 
 
      .attr("class", "players") 
 
      .append($("<td>").text(playerResults_FN + " " + playerResults_LN)) 
 
      .append($("<td>").text(playerResults_Team)) 
 
      .append($("<td>").text(playerResults_Position)) 
 
     ) //<tr> append 
 
} 
 
    } //for loop 
 

 

 
    // on click for when a player is selected 
 
    $(".players").on("click", function() { 
 
     $("#resultsBox").show(); 
 
     $("#searchPanel").hide(1000); 
 

 

 

 
     var playerID = $(this).attr("id"); 
 
     var playerFN = $(this).attr("data-FN"); 
 
     var playerLN = $(this).attr("data-LN"); 
 

 
     arrestRecord(playerFN, playerLN); 
 
     playerDisplay(playerID); 
 
     displayPlayerStats(playerFN, playerLN); 
 
     playerFantasyStats(playerFN, playerLN) 
 
    })

+0

'if(!alreadyPlaying.indexOf(playerResults_ID){'は構文エラーがあり、条件は '(alreadyPlaying.indexOf(playerResults_ID)== -1) 'writeOutメソッドは、* indexOf *が0を返す場合にのみtrueを返します(* playerResults_ID *が最初の要素と一致する場合にのみ発生します)。 – RobG

+0

@RobG - この場合、構文エラーはありません。 playerResults_IDは既に信頼できるソース(元のJSON)からフィルタされていますが、 (alreadyPlaying.indexOf(playerResults_ID)== -1)はより良い(もっと普遍的に正しい)JS回答ですこのコードを使用する) - それを言いましてありがとうございます。 –

関連する問題