Вопрос

Если у меня есть следующее:

{"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 += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top