問題は、使用している次のコードにあります。
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
表すオブジェクトのコレクションである配列を作成し、それらをリストに吐き出します。(もちろん、一致を見つけたら何をしたいのかを言ったわけではないので、必要に応じてこれを適応させることができます)。Name
Value
これは、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"},
...
]
...
}