配列内に配列を構築しようとしていますが、配列 [x][y] を介して格納されたデータにアクセスできるようにしたいと考えています。以下にサンプル コードがありますが、思い通りに動作しません。だれかが問題を見つけられるかどうか疑問に思います。
$.getJSON("/data/", function(data){
var test = {};
var levels = [1,2,3];
$.each(data, function(key, value){
var cat = data[key];
$.each(levels, function(li,l){
var base = cat[2];
var keys = Object.keys(base);
if (l == 1) {
test[l] = {};
$.each(keys, function(ki,k){
test[l][k] = base[k][0];
});
}
});
});
alert(Object.keys(test[1]));
});
フェッチされた JSON データの構造は次のとおりです。
{
"1": ["Distribution", 0,
{
"9": ["Salmonella", 0,
{}],
"6": ["E. coli", 0,
{
"8": ["from pigs", 0,
{}],
"7": ["from humans", 0,
{}]}]}],
"2": ["Adhesin", 0,
{
"1": ["PapG", 1,
{
"2": ["has three subtypes:", 0,
{
"3": ["PapG-I", 0,
{}],
"4": ["PapG-II", 0,
{}],
"5": ["PapG-III", 0,
{}]}]}]}],
"3": ["Receptors", 0,
{}],
"4": ["Disease associations", 0,
{}],
"5": ["Regulation", 0,
{}]
}
上記のコードは、テスト配列内の配列に値を格納していないようですalert(Object.keys(test[1]))
(つまり、空白の警告のみ)。
編集: Oleg V. Volkov (以下) によって発見された間違いの後:
$.getJSON("/data/", function(data){
var test = {};
var levels = [1,2,3];
$.each(data, function(key, value){
// var cat = data[key];
$.each(levels, function(li,l){
var base = value[2];
var keys = Object.keys(base);
if (l == 1) {
if ($.inArray(l,test) == -1){
test[l] = {};
}
$.each(keys, function(ki,k){
test[l][k] = base[k][0];
});
}
});
});
alert(Object.keys(test[1]));
});
まだ動作していません。