所以,如果我有:
var hashof = {"stuff":
{"1": { "name": "fred"}},
{"2": { "name": "barney"}}
};
如何使用javascript函数获取:
var hashof = {"stuff":
["name" : "fred"],
["name" : "barney]
};
我希望能够使用mustache.js的结构。
答案 0 :(得分:2)
后者是不可能的。它无效。你可能想要这样的东西:
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]);
但是你将无法保留原始密钥(至少不能确保)。
答案 1 :(得分:1)
Javascript没有关联数组。相当于" hash"当你正在调用它或一个物体时,它实际上就是它。你可以期待的最好的是:{"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]);
}
}
修改强> 似乎输入对象没有我期望的格式(或者,实际上,我第一次读取它时读取的格式)。它目前有两个属性:
{"1": {"name": "fred"}}
{"2": {"name": "barney"}}
(密钥可能为0,我不确定这一点)因此,input.stuff
只有一个项目,input[0]
有另一个项目。如果如下,那就更有意义了:
var input = {
"stuff": {
"1": {"name": "fred"},
"2": {"name": "barney"}
}
}
如果是这种情况,我上面的代码就可以了。根据给出的输入,它不会。
答案 2 :(得分:0)
javascript中的数组只能有数字索引,你需要使用Object来获得关联数组。
数组是一组有序的值 与单个变量相关联 名称。请注意,您不应该使用它 作为关联数组,使用Object 代替。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array
答案 3 :(得分:0)
我真的应该对此进行测试,但快速而肮脏看起来它会起作用......
$.each(hashof.stuff, function(index, val) {
hashof.stuff[index] = val.index;
});