Вопрос
Если у меня есть следующее:
{"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"}
{"Make":"Toyota","Model":"Corolla","Year":"2008"}
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
}
И у меня есть имя "hdrs" (т.е."Make"), как я могу ссылаться на data
экземпляры массива?кажется, что data["Make"][0]
должно сработать ... но не удается получить правильную ссылку
Редактировать
Извините за двусмысленность..Я могу прокручивать через hdrs
чтобы получить каждое имя hdr, но мне нужно использовать значение каждого экземпляра hdrs
чтобы найти все элементы данных в data
(не уверен, что это лучшее объяснение).и у меня это будет в переменной t
поскольку это JSON (ценю повторную пометку) Я хотел бы иметь возможность ссылаться на что-то вроде этого: t.data[hdrs[i]][j]
Решение
Мне пришлось немного изменить ваш код:
var x = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
alert( x.data[0].Make );
Редактировать:в ответ на вашу правку
var x = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
var Header = 0; // Make
for( var i = 0; i <= x.data.length - 1; i++ )
{
alert( x.data[i][x.hdrs[Header]] );
}
Другие советы
Итак, вот так?
var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];
Это должно сработать, если я вас правильно понимаю...
var x = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"}
{"Make":"Toyota","Model":"Corolla","Year":"2008"}
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
x.data[0].Make == "Honda"
x['data'][0]['Make'] == "Honda"
У вас есть поиск по массиву / хэшу в обратном направлении :)
Я не уверен, что понимаю ваш вопрос, но...
Предполагая, что приведенный выше JSON является var obj, вы хотите:
obj.data[0]["Make"] // == "Honda"
Если вы просто хотите сослаться на поле, на которое ссылается первый заголовок, это будет что-то вроде:
obj.data[0][obj.hdrs[0]] // == "Honda"
во-первых, вы забыли поставить запятые в конце в элементах массива данных.
попробуйте следующее:
@Кент Фредрик:обратите внимание, что последняя запятая строго не нужна, но позволяет вам легче перемещать строки (т. Е., если вы перемещаете или добавляете после последней строки, и в ней нет запятой, вам нужно будет специально не забыть добавить ее.я думаю, что лучше всего всегда ставить запятые в конце.)var obj_hash = { "hdrs": ["Make","Model","Year"], "data" : [ {"Make":"Honda","Model":"Accord","Year":"2008"}, {"Make":"Toyota","Model":"Corolla","Year":"2008"}, {"Make":"Honda","Model":"Pilot","Year":"2008"}, ] };
переменная ref_data = obj_hash.data;
alert(ref_data[0].Make);
возможно, попробуйте data[0].Сделайте
Близко, вы бы использовали
var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;
Отображаемый вами код синтаксически некорректен;здесь нужно поставить несколько запятых.Я заставил это сработать:
$foo = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
и тогда я смогу получить доступ к данным как:
$foo["data"][0]["make"]
С помощью ответов (и после правильного определения внутреннего и внешнего циклов) Я заставил это работать:
var t = eval( "(" + request + ")" ) ;
for (var i = 0; i < t.data.length; i++) {
myTable += "<tr>";
for (var j = 0; j < t.hdrs.length; j++) {
myTable += "<td>" ;
if (t.data[i][t.hdrs[j]] == "") {myTable += " " ; }
else { myTable += t.data[i][t.hdrs[j]] ; }
myTable += "</td>";
}
myTable += "</tr>";
}