2014-06-11 36 views
0

我的目标是能够产生完全像这样的东西。jQuery .each()创建对象数组

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

我不知道是什么让你把摆在首位的字符串。我的意思是,看起来你知道什么是阵列,因为你正在使用它们。 –

回答

4

.map会比.each更好。

$.getJSON("js/cost.json", function(d) { 
    var items = $.map(d.data, function(v) { 
    return [[v.year, v.cost]]; 
    }); 
}); 

The demo.

+0

@KingKing你是对的,我修复了代码。但它可能会返回'[['年','成本'],...]'。 – xdazz

+0

我刚刚发现了这种方式,看看你已经修好了:) –

5

当前您正在创建一个字符串,然后推送到数组。的

items.push("['"+v.year+"',"+v.cost+"]"); 
3

使用

items.push([v.year, v.cost]); 

不是数据被推为一个字符串,因为你正在传递一个字符串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