我有两个数组:
var columns = ["Date", "Number", "Size", "Location", "Age"];
var rows = [
["2001", "5", "Big", "Sydney", "25"],
["2005", "2", "Med", "Melbourne", "50"],
["2012", "20", "Huge", "Brisbane", "80"]
];
我正在尝试将它们组合成行数组中每个项目的 javascript 对象。之后,我想将每个对象推入一个新数组。
喜欢:
var newarray = [];
//'thing' should be the same structure for each row item
var thing = {
"Date": "2001",
"Number": "5",
"Size": "Big",
"Location": "Sydney",
"Age": "25"
}
newarray.push(thing);
当我知道列名时我可以这样做,但是当列名未知时我需要能够以这种方式存储数据——即基于列数组的索引。
我以前试过这样的:
for (var y = 0; y < rows.length; y++) {
for (var i = 0; i < columns.length; i++) {
thing[columns[i]] = rows[i][i];
}
newarray.push(thing)
}
上面的代码只一次又一次地存储第一项(根据 rows.length)。
我不明白如何将列名与行组合起来创建一个对象数组。 “行”包含数组这一事实尤其令人困惑。
原文由 tamarasaurus 发布,翻译遵循 CC BY-SA 4.0 许可协议
在外循环的每次迭代开始时创建一个新的
thing
对象。如果你不这样做,每次你说thing[columns[i]]
你将覆盖同一个对象的属性,当你将它推入newarray
你最终会得到什么with 是一个包含 对同一对象 的引用的数组。此外,在循环内确保您获得正确的索引(您当前有[i][i]
而不是[y][i]
):“‘行’包含数组这一事实尤其令人困惑……”
对于您的示例数据
rows.length
将为 3,而rows[0]
是数组:rows[0][3]
是“悉尼”。以此为例,您应该能够看到
rows[y][i]
将为您提供y
和i
的每个值。