我的目标是能够生成完全相同的东西。
var data = google.visualization.arrayToDataTable([
['Year', 'Cost'],
['2004', 1000],
['2005', 1170],
['2006', 660],
['2007', 1030]
]);
但我试图通过使用由JSON生成的数据
来完成它{
"uid": 1,
"name": "Cost",
"data": [
{
"year": 2009,
"cost": 640
},
{
"year": 2010,
"cost": 620
},
{
"year": 2011,
"cost": 600
},
{
"year": 2012,
"cost": 620
}
]
}
使用这个jQuery
$.getJSON("js/cost.json", function(d) {
console.log(d.data);
var items = [];
$.each( d.data, function( k, v ) {
console.log(v.cost);
console.log(v.year);
items.push("['"+v.year+"',"+v.cost+"]");
});
console.log(items);
});
但我注意到的是它被推送为一个字符串,将对象推送到一个数组的正确方法是什么,这样我才能使它工作。
答案 0 :(得分:5)
目前您正在创建一个字符串,然后推送到数组。
使用
items.push([v.year, v.cost]);
而不是
items.push("['"+v.year+"',"+v.cost+"]");
答案 1 :(得分:4)
.map
会比.each
好。
$.getJSON("js/cost.json", function(d) {
var items = $.map(d.data, function(v) {
return [[v.year, v.cost]];
});
});
<强> The demo. 强>
答案 2 :(得分:3)
数据被推送为字符串,因为您将字符串传递给items.push
。如果你想要一个数组,只需按一个数组:
items.push([v.year, v.cost]);
这就是你需要做的一切
但是,根据事物的外观,你希望年份是一个字符串,而不是一个数字,因为你引用了v.year
的值:
items.push("['" + v.year + "', " + v.cost + "]");
要做到这一点,只需使用JS的类型强制:
items.push([''+v.year, +(v.cost)]);
//concatenate with empty string => coerce to string
// +(someValue) coerces someValue to number