だから私が持っている場合:
var hashof = {"stuff":
{"1": { "name": "fred"}},
{"2": { "name": "barney"}}
};
JavaScript関数を使用して取得するにはどうすればよいですか:
var hashof = {"stuff":
["name" : "fred"],
["name" : "barney]
};
構造体をmustache.jsで使えるようにしたいです。
だから私が持っている場合:
var hashof = {"stuff":
{"1": { "name": "fred"}},
{"2": { "name": "barney"}}
};
JavaScript関数を使用して取得するにはどうすればよいですか:
var hashof = {"stuff":
["name" : "fred"],
["name" : "barney]
};
構造体をmustache.jsで使えるようにしたいです。
後者は不可能です。無効です。おそらく次のようなものが必要でした:
var hashof = {"stuff": [
{"name" : "fred"},
{"name" : "barney"}
] };
以下は、必要に応じて変換する必要があります。
function convert(input) {
var output = [],
key;
for (key in input.stuff) {
if (input.stuff.hasOwnProperty(key)) {
output[parseInt(key, 10)] = input.stuff[key];
}
}
return {stuff: output};
}
結果の配列はまばらになる可能性があることに注意してください。これを回避したい場合は、次の行を置き換えることができます
output[parseInt(key, 10)] = input.stuff[key];
と
output.push(input.stuff[key]);
ただし、元のキーを保持することはできません (少なくとも保証されません)。
Javascriptには連想配列がありません。これに相当するのは、呼び出している「ハッシュ」、または実際のオブジェクトです。あなたが望むことができる最高のものはこれです:{"stuff": [{"name": "fred"}, {"name": "barney"}]}
以下はテストされていませんが、少なくとも正しい方向を示しているはずです。
var input = {"stuff": {"1": { "name": "fred"}}, {"2": { "name": "barney"}} },
output = {}, key, innerKey;
for key in input
{
output[key] = [];
for innerkey in input[key]
{
output[key].push(input[key][innerKey]);
}
}
編集: 入力オブジェクトが私が期待した形式(または、実際、最初に読んだときに読んだ形式)を持っていないようです。現在、2つのプロパティがあります。
{"1": {"name": "fred"}}
{"2": {"name": "barney"}}
のキーなしアイテムがあります(キーは0である可能性があります、この点についてはわかりません)つまり、input.stuff
1つのアイテムだけがあり、input[0]
別のアイテムがあります。それが次のようであるならば、それはより理にかなっているでしょう:
var input = {
"stuff": {
"1": {"name": "fred"},
"2": {"name": "barney"}
}
}
この場合、上記の私のコードは機能します。与えられた入力では、そうではありません。
JavaScript の配列は数値インデックスのみを持つことができます。連想配列を持つには Object を使用する必要があります。
配列は、1 つの変数名に関連付けられた値の順序付けられたセットです。連想配列として使用しないでください。代わりに Object を使用してください。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array
私は本当にこれをテストする必要がありますが、速くて汚れていてうまくいくようです...
$.each(hashof.stuff, function(index, val) {
hashof.stuff[index] = val.index;
});