所以如果我有:
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]);
}
}
编辑: 输入对象似乎没有我期望的格式(或者,事实上,我第一次阅读时阅读的格式)。它当前有两个属性:
{"1": {"name": "fred"}}
{"2": {"name": "barney"}}
(密钥可能为 0,我不确定这一点)所以,input.stuff
只有一个项目,而input[0]
有另一个项目。如果是这样的话,那就更有意义了:
var input = {
"stuff": {
"1": {"name": "fred"},
"2": {"name": "barney"}
}
}
如果是这种情况,我上面的代码就可以了。给定输入,它不会。
我真的应该对此进行测试,但它看起来又快又脏,它看起来会起作用......
$.each(hashof.stuff, function(index, val) {
hashof.stuff[index] = val.index;
});
javascript中的数组只能有数字索引,您需要使用Object才能拥有关联数组。
数组是与单个变量名关联的一组有序值。请注意,您不应将其用作关联数组,而应使用 Object 。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array