我试图从现有的JSON文件重建数据结构。为了方便示例,我删除了所有不必要的代码:
var entries = [
{
"band": "Weezer",
"song": "El Scorcho"
},
{
"band": "Chevelle",
"song": "Family System"
}
]
var rows = {};
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
var t = "a";
for (var key in entry) {
rows[t] = t;
t = t+"1";
}
$("#agenda").append(JSON.stringify(rows));
}
$("#agenda").append("<br /><br /> In the end, it only shows the last one:<br />");
$("#agenda").append(JSON.stringify(rows));
还有一个更好的例子:http://jsfiddle.net/84w6F本例的目的是通过将键和值都作为变量调用,尝试重建"entries"中的数据,使其完全相同。由于某种原因,我最终弄得一团糟,最后当我尝试在循环后读取数组时,它只显示最后一个子数组。
您这里有一个包含2个条目的一维数组,而不是多维数组。
你的外部循环,迭代数组中的两个对象fine,而内部循环遍历每个对象中的所有键值对,但它只设置rows["a"]
和rows["a1"]
,因为数组中的每个对象只有2个属性。
我不太确定你想对数组中的数据做什么,如果你想完全复制它们,那么你可以这样做:
var rows = [];
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
var newObj = {};
for (var key in entry) {
newObj[key] = entry;
}
rows.push(newObj);
}
一切正常。因为有2个条目,所以在循环中添加了两次行:
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
var t = "a";
for (var key in entry) {
rows[t] = t;
t = t+"1";
}
$("#agenda").append(JSON.stringify(rows));
}
您实际上正在做的是,您正在重复替换rows['a']
和rows['a1']
(而不是增长它),并追加它两次,以便您看到第一个结果。