我试图在一个对象中定义一个函数,其中要处理的函数部分基于一个变量。在下面的代码中,如何将我*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 创建图表。
将myColumn
和viewColumnDescription
从var
变成let
. 替换*dynamicValue*
为myColumn
或者,如果您不想使用let
,则必须使用闭包来确保 myColumn 的值存储在适当的范围内...
如果你不使用 let - 或者你没有把它放在一个闭包中,所有的viewColumnDescription
函数都会看到myColumn
value = 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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句