У меня есть этот JSON. Мне нужно сначала сравнить значения в teams
со значениями в html_content.position[i]
где i
должен быть циклом var, а затем, если сравнение возвращает true, тогда получите значение. См. Этот пример:
html_content.position[0][0].toLowerCase() = "navegantes";
Затем я должен сравнивать с каждым значением в teams
и если есть какой-либо ключ, который равен es, тогда я должен получить значение, взяв пример, я должен получить это значение:
"img\/magallanes.jpg"
Может ли кто-нибудь мне помочь?
Проблема заключается в том, что вы используете этот код:
html_content.position[0][0].toLowerCase() = "navegantes";
html_content.position
самом деле представляет собой массив массивов массивов (хотя в вашем примере данные каждый внутренний массив имеет только длину 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
для соответствующего изображения, и выкладывает их в списке. (Конечно, вы не сказали, что хотите делать, как только найдете совпадение, поэтому вы можете приспособить его по мере необходимости).
Это довольно типичный шаблон для сопоставления элементов в двух массивах (один вложенный цикл), и в моем примере предполагается, что нужно найти только одно совпадение, и в этом случае он 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"},
...
]
...
}
Предполагая, что у вас есть строка JSON, которую вы анализировали в объект, который выглядит следующим образом:
var json = {"teams":{
"navegantes":"img\/magallanes.jpg",
"tigres":"img\/tigres.jpg",
"caribes":"img\/caribes.jpg",
"leones":"img\/leones.jpg",
"aguilas":"img\/aguilas.jpg",
...
}};
Вы можете выполнять итерацию с помощью each()
$.each(json.teams, function(i, v){
console.log(i);
console.log(v);
});