jQuery .each()创建对象数组

时间:2014-06-11 08:50:39

标签: javascript jquery arrays json object

我的目标是能够生成完全相同的东西。

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);
});

但我注意到的是它被推送为一个字符串,将对象推送到一个数组的正确方法是什么,这样我才能使它工作。

3 个答案:

答案 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