更改数组对象的元素

时间:2013-08-17 08:58:15

标签: javascript json dom google-visualization

首先here is a fiddle。我想动态更改变量data的参数。如果查看Firebug控制台,可以查看数据数组对象。我查了很多,但我无法弄明白data

简而言之,我想用return_data元素重新生成数据数组对象。 return_data对象的元素是动态的。在fiddle中它有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]
]);

3 个答案:

答案 0 :(得分: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)

希望它有所帮助。

答案 1 :(得分:1)

所以,我查看了API,并用你的小提琴玩了一下。 这是非常简单的搜索&amp;替换以查看数据并更新提供的数组中的值。

见这里: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);
  }
}

TheChartTheDataTheOptions只是来自您小提琴的chartdataoptions变种的全球变种。

我也很确定它在循环方面效率不高,但你可以根据自己的意愿优化基本思路。

答案 2 :(得分:0)

我已经解决了here中的问题,感谢所有帮助。

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