Ссылка на массив Javascript - PullRequest
       21

Ссылка на массив Javascript

0 голосов
/ 17 сентября 2008

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

{"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]

Ответы [ 9 ]

3 голосов
/ 17 сентября 2008

Мне пришлось немного изменить ваш код:

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]] );
}           
1 голос
/ 17 сентября 2008

Я не уверен, что понимаю ваш вопрос, но ...

Предполагая, что вышеупомянутый JSON является var obj, вы хотите:

obj.data[0]["Make"] // == "Honda"

Если вы просто хотите обратиться к полю, на которое ссылается первый заголовок, это будет что-то вроде:

obj.data[0][obj.hdrs[0]] // == "Honda"
1 голос
/ 17 сентября 2008

сначала вы забыли свои запятые в элементах массива данных.

попробуйте следующее:

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"},
    ]
};</p>

<p>var ref_data = obj_hash.data;</p>

<p>alert(ref_data[0].Make);
@ Кент Фредрик: обратите внимание, что последняя запятая не нужна строго, но позволяет вам легче перемещать строки (например, если вы перемещаете или добавляете после последней строки, и у нее нет запятой) , вам нужно не забыть добавить один. Я думаю, что лучше всегда иметь запятые.)
1 голос
/ 17 сентября 2008
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"

У вас есть обратный поиск в массиве / хэше :)

1 голос
/ 17 сентября 2008

Итак, как это?

var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];

Это должно сработать, если я вас правильно понимаю ...

0 голосов
/ 18 сентября 2008

С помощью ответов (и после получения правильных внутренних и внешних циклов) я получил это для работы:

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>";
}
0 голосов
/ 17 сентября 2008

Ваш отображаемый код не является синтаксически правильным; нужны запятые. Я получил это на работу:

$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"]
0 голосов
/ 17 сентября 2008

Закрыть, вы бы использовали

var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;
0 голосов
/ 17 сентября 2008

возможно попробуйте данные [0]. Сделайте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...