0

私はこの JSONを持っています。最初に値をteamsループvar の値と比較し、比較が true を返す場合は値を取得する必要がありますhtml_content.position[i]i次の例を参照してください。

html_content.position[0][0].toLowerCase() = "navegantes";

次に、各値と比較する必要teamsがあり、等しいキーがある場合は、値を取得する必要があります。例を挙げて、この値を取得する必要があります。

"img\/magallanes.jpg"

ここで何か助けてもらえますか?

4

2 に答える 2

1

問題は、使用している次のコードにあります。

html_content.position[0][0].toLowerCase() = "navegantes";

html_content.position実際には配列の配列の配列です(ただし、サンプルデータでは、各内部配列の長さは1しかありません...それは常にtrueですか?)、の値をテストするには、そこにブラケット演算子がもう1つ必要ですhtml_content.position[i][0][0]

JSON データを組み込み、各チームを調べて、対応するものを見つける例を次に示しますposition(JSfiddle デモの動作については、以下を参照してください)。

ソリューション コード:

var matches = [];

for(var teamName in json.teams)
{
   for(var i = 0, len = json.html_content.position.length; i < len; i++)
   {
      if(json.html_content.position[i][0][0].toLowerCase() === teamName.toLowerCase())
      {
          // found a match. do something with it..
          matches[matches.length] = {Name: teamName, Value: json.teams[teamName]};
          break;
      }
   }
}

JSON: (以前はサードパーティのサイトでのみ公開されていたため、参照用)

var json = {
      "response":true,
      "teams":{
         "navegantes":"img\/magallanes.jpg",
         "tigres":"img\/tigres.jpg",
         "caribes":"img\/caribes.jpg",
         "leones":"img\/leones.jpg",
         "aguilas":"img\/aguilas.jpg",
         "tiburones":"img\/tiburones.jpg",
         "bravos":"img\/bravos.jpg",
         "cardenales":"img\/cardenales.jpg",
         "maga":"img\/magallanes.jpg",
         "tigr":"img\/tigres.jpg",
         "cari":"img\/caribes.jpg",
         "leon":"img\/leones.jpg",
         "agui":"img\/aguilas.jpg",
         "tibu":"img\/tiburones.jpg",
         "brav":"img\/bravos.jpg",
         "card":"img\/cardenales.jpg"
      },
      "html_content":{
         "position":[
            [
               [
                  "Navegantes",
                  "14",
                  "10",
                  "4",
                  "0"
               ]
            ],
            [
               [
                  "Tigres",
                  "14",
                  "10",
                  "4",
                  "0"
               ]
            ],
            [
               [
                  "Caribes",
                  "14",
                  "9",
                  "5",
                  "1"
               ]
            ],
            [
               [
                  "Leones",
                  "14",
                  "9",
                  "5",
                  "1"
               ]
            ],
            [
               [
                  "Tiburones",
                  "13",
                  "5",
                  "8",
                  "4.5"
               ]
            ],
            [
               [
                  "Aguilas",
                  "14",
                  "5",
                  "9",
                  "5"
               ]
            ],
            [
               [
                  "Bravos",
                  "14",
                  "4",
                  "10",
                  "6"
               ]
            ],
            [
               [
                  "Cardenales",
                  "13",
                  "3",
                  "10",
                  "6.5"
               ]
            ]
         ],
         "current":[
            [
               "MAGA",
               "CARI",
               "7:00 pm",
               "PUERTO LA CRUZ"
            ],
            [
               "AGUI",
               "LEON",
               "4:00 pm",
               "CARACAS"
            ],
            [
               "BRAV",
               "TIGR",
               "5:30 pm",
               "MARACAY"
            ],
            [
               "TIBU",
               "CARD",
               "5:30 pm",
               "BARQUISIMETO"
            ]
         ],
         "next":[
            [
               "MAGA",
               "CARI",
               "6:00 pm",
               "PUERTO LA CRUZ"
            ],
            [
               "AGUI",
               "LEON",
               "1:00 pm",
               "CARACAS"
            ],
            [
               "TIBU",
               "TIGR",
               "5:30 pm",
               "MARACAY"
            ],
            [
               "BRAV",
               "CARD",
               "2:00 pm",
               "BARQUISIMETO"
            ]
         ],
         "previous":[

         ]
      }
   };

ここでフィドルの例を参照してください: http://jsfiddle.net/VqHpJ/

例のフィドルは、チームと関連する画像をmatches表すオブジェクトのコレクションである配列を作成し、それらをリストに吐き出します。(もちろん、一致を見つけたら何をしたいのかを言ったわけではないので、必要に応じてこれを適応させることができます)。NameValue

これは、2 つの配列 (ネストされた 1 つのループ) 内の要素を一致させるためのかなり典型的なパターンです。私の例では、一致するものが 1 つだけ見つかると想定しています。その場合break、ネストされたループから出て、次のチームを探し始めます。したがって、最悪の場合、パフォーマンスは O(n^2) になります。

teamsオブジェクトには実際にはチームの配列がなく、チーム名ごとに特定のプロパティがあるため、これは少し注意が必要です (ただし難しくありません) 。teamsしたがって、解決策は、を使用してオブジェクトのプロパティを反復処理することでしたfor(var teamName in json.teams)。JSON を生成する関数の作成者である場合は、代わりにチームの配列を生成するように修正することを検討してください。次に例を示します。

var json = {
      "response":true,
      "teams":
      [
         { "Name": "navegantes", "ImageUrl": "img\/magallanes.jpg" },
         { "Name": "tigres", "ImageUrl": "img\/tigres.jpg"},
         { "Name": "caribes", "ImageUrl": "img\/caribes.jpg"},
         ...
      ]
      ...
}
于 2013-10-26T16:57:00.410 に答える