0

首先这里是一个 fiddle。我想动态更改变量的参数data。如果您查看 Firebug 控制台,您可以查看数据数组对象。我查了很多,但我无法弄清楚data

简而言之,我想用return_data元素重新生成数据数组对象。对象的return_data元素是动态的。在小提琴中它有 3 个元素,但它可能与 3 个不同。我怎样才能动态地改变它?

提前致谢。

var return_data = [{"name":"mrzurafa","count":315,"pop":5,"impact":7.37},{"name":"mutcato","count":20,"pop":5,"impact":56},{"name":"s0lukciyerli","count":3488,"pop":5,"impact":25.65}];

var data = google.visualization.arrayToDataTable([
  ['name','impact','pop','temp','count'],
  ['beyinsiz',80.66,1.67,2,33739900],
  ['mutcato',79.84,1.36,4,81902307],
  ['s0lukciyerli',78.6,1.84,8,5523095],
  ['herbkubilenadam',81.55,2.96,10,748560000],
  ['mrzurafa',88.09,2.05,40,307007000]
]);
4

3 回答 3

1

你可以试试这个,这会返回一个新列表,其结构与你的 return_data 完全相同:

var return_data = [{"name":"mrzurafa","count":315,"pop":5,"impact":7.37},{"name":"mutcato","count":20,"pop":5,"impact":56},{"name":"s0lukciyerli","count":3488,"pop":5,"impact":25.65}];

var data = ([
  ['name','impact','pop','temp','count'],
  ['beyinsiz',80.66,1.67,2,33739900],
  ['mutcato',79.84,1.36,4,81902307],
  ['s0lukciyerli',78.6,1.84,8,5523095],
  ['herbkubilenadam',81.55,2.96,10,748560000],
  ['mrzurafa',88.09,2.05,40,307007000]
]);

//prepare object
var item = {}
for (j=0;j<data[0].length;j++) {
    item[data[0][j]] = "";
}

//prepare list of objecs
var objs = []

for (i=1;i< data.length;i++) {
    item['name'] = data[i][0];
    item['impact']=data[i][1];
    item['pop']=data[i][2];
    item['temp']=data[i][3];
    item['count']=data[i][4];
    objs.push(item)
}

console.log(objs)

希望它以某种方式有所帮助。

于 2013-08-17T09:59:35.830 回答
1

所以,我浏览了 API 并玩了一下你的小提琴。从提供的数组中查看数据并更新值是非常简单的搜索和替换。

见这里:http: //jsfiddle.net/2Za7T/

function updateData(data, keycolumn) {
  var i, j;
  // mapping
  var map = {};
  var keyColumnIndex = -1;
  for (i = 0; i < TheData.getNumberOfColumns(); i++) {
    map[TheData.getColumnLabel(i)] = i;
    if (TheData.getColumnLabel(i) == keycolumn)
        keyColumnIndex = i;
  }
  // updating
  if (keyColumnIndex >= 0) {
    for (i = 0; i < data.length; i++) {
        var record = data[i];
        if (record[keycolumn]) {
            var matchedRows = TheData.getFilteredRows([{column: keyColumnIndex, value: record[keycolumn]}]);
            for (j = 0; j < matchedRows.length; j++) {
                for (var key in record)
                    if (key != keycolumn) {
                        TheData.setValue(matchedRows[j], map[key], record[key]);
                    }
            }
        }
    }
    TheChart.draw(TheData, TheOptions);
  }
}

其中TheChart,TheDataTheOptions只是你小提琴中的 , 和 vars 的chart全局data变量。options

我也很确定它在循环上不是很有效,但是您可以根据需要优化基本思想。

于 2013-08-17T10:01:52.903 回答
0

我已经解决了这里的问题感谢大家的帮助。

        jsonObj = return_data;

        var Obje = [];
        Obje[0]=['name','impact','pop','temp','count'];
        for(var i=0; i<jsonObj.length; i++)
        {
            Obje[i+1]=[jsonObj[i]['name'],jsonObj[i]['impact'],jsonObj[i]['pop'],10*i,jsonObj[i]['count']];
        }
        console.log(Obje);

        // Create and populate the data table.
        var data = google.visualization.arrayToDataTable(
            Obje
        );
于 2013-08-17T11:54:26.120 回答