我试图在一个对象中定义一个函数,其中一个项目要处理的函数部分基于一个变量。在下面的代码中,如何将*dynamicValue*
保存为myColumn
的当前值?
var viewColumns = [0];
var count = 0;
var dataCount = 3;
var total = 0;
while (count < dataCount) {
var myColumn = count + 1;
var viewColumnDescription = {
calc: function (dt, row) {
return dt.getValue(row, *dynamicValue*);
},
type: "number",
role: "annotation"
};
viewColumns.push(myColumn);
viewColumns.push(viewColumnDescription);
count += 1;
}
请注意,我对dataCount的值进行了硬编码,以便所有变量都在示例部分中定义,但在我的实际代码中,此值当前更改为介于1到3之间的数字。以后可能会更多以及我希望能够使用循环来定义项目。
在这种情况下,生成的对象应该就像我这样做:
viewColumns = [0,
1, {
calc: function (dt, row) {
return dt.getValue(row, 1);
},
type: "number",
role: "annotation"
},
2, {
calc: function (dt, row) {
return dt.getValue(row, 2);
},
type: "number",
role: "annotation"
},
3, {
calc: function (dt, row) {
return dt.getValue(row, 3);
},
type: "number",
role: "annotation"
},
{
calc: function (dt, row) {
return 0;
},
label: "Total",
type: "number",
},
{
calc: function (dt, row) {
return 'Total: ' + (dt.getValue(row, 1)
+ dt.getValue(row, 2)
+ dt.getValue(row, 3));
},
type: "string",
role: "annotation"
}
];
如果dataCount
为2而不是3,则会删除对dt.getValue(row, 3)
的所有引用。希望一旦我知道第一部分,我就可以弄清楚如何让最后一个函数计算所有可用行的总和。
这将用于使用Google Visualization API创建图表。
答案 0 :(得分:0)
将myColumn
和viewColumnDescription
从var
更改为let
。
将*dynamicValue*
替换为myColumn
或者如果您不想使用let
,则必须使用闭包来确保myColumn的值存储在适当的范围内...
如果你不使用let - 或者你没有把它放在一个闭包中,那么所有viewColumnDescription
函数都会看到myColumn
值为3
let
示例 - 请注意,我只在必要时才使用它。
var viewColumns = [0];
var count = 0;
var dataCount = 3;
var total = 0;
while (count < dataCount) {
let myColumn = count + 1;
let viewColumnDescription = {
calc: function (dt, row) {
return dt.getValue(row, myColumn);
},
type: "number",
role: "annotation"
};
viewColumns.push(myColumn);
viewColumns.push(viewColumnDescription);
count += 1;
}