仅取对象的最后一个值

时间:2014-02-02 13:47:42

标签: javascript json

我正在尝试实施Google Graph但是这段代码有什么不对,它取的是对象的最后一个值。

var colEvn = ["AAA","BBB","CCC"];

var viewObj = new Object();

    var func = function viewFunc(dt, row) {
        return (dt.getValue(row, 1) == colEvn[j]) ? dt.getValue(row, 2) : null;
    }
    var viewObj = new Object();

    for (var j = 0, m = colEvn.length; j < m; j++) {
        viewObj.type = 'number';
        viewObj.label = colEvn[j];
        viewObj.calc = func
     }


    var view = new google.visualization.DataView(data);
    view.setColumns([0, viewObj]);

预期结果应如下:

{
        type: 'number',
        label: 'AAA',
        calc: function (dt, row) {
            return (dt.getValue(row, 1) == 'AAA') ? dt.getValue(row, 2) : null;
        }
    }, {
        type: 'number',
        label: 'BBB',
        calc: function (dt, row) {
            return (dt.getValue(row, 1) == 'BBB') ? dt.getValue(row, 2) : null;
        }
    }, {
        type: 'number',
        label: 'CCC',
        calc: function (dt, row) {
            return (dt.getValue(row, 1) == 'CCC') ? dt.getValue(row, 2) : null;
        }
    }

2 个答案:

答案 0 :(得分:1)

迭代每次都会覆盖同一个对象,似乎应该通过可视化API传递一个对象数组。

阅读documentation,它似乎也应该将一个对象传递给setColumns函数的列索引,所以你可能也必须在循环中这样做

var view = new google.visualization.DataView(data);

for (var j = 0, m = colEvn.length; j < m; j++) {
    var viewObj = {
        type:  'number',
        label: colEvn[j],
        calc:  func
    };
    view.setColumns([j, viewObj]);
 }

答案 1 :(得分:0)

好的,第一点就是你不能为你的所有列创建一个单独的函数,我已经改变了它:

var colEvn = ["AAA", "BBB", "CCC"];
var columns = [0];
for (var j = 0, m = colEvn.length; j < m; j++) {
    var viewObj = {};
    viewObj.type = 'number';
    viewObj.label = colEvn[j];
    viewObj.calc = function viewFunc(dt, row) {
        alert("column label : " + viewFunc._colEvn);
        return (dt.getValue(row, 1) == viewFunc._colEvn) ? dt.getValue(row, 2) : null;
    };
    viewObj.calc._colEvn = colEvn[j];
    columns.push(viewObj);
}

var view = new google.visualization.DataView(data);
view.setColumns(columns);

如果alerts执行代码及其显示的内容,请告诉我。