首页 > 解决方案 > 是否可以在 Javascript 中构造一个内置“变量”的字符串?

问题描述

我正在使用一些脚本编写 PDF,并且我正在使用控制台和一些简单的循环将代码应用于字段以节省重复工作。在某些情况下,我将自定义计算脚本应用于需要将一个整数从一个字段更改为下一个字段的字段。如果所有脚本都相同,我将在调试器控制台中运行它:

var s = "if(this.getField(\"Span A\").value >= 60){\n\
    event.value = Math.round(((this.getField(\"Span A\").value*41500 - 1674500)/233));\n\
}else{\n\
    event.value = Math.round((this.getField(\"Span A\").value*3500/60));\n\
}";

for (var i = 0; i < this.numFields; i++){
    var f = this.getField(getNthFieldName(i));
    if(f.name.match(/quant a/i) != null){
        var n = f.name.match(/\d/g);
        f.setAction("Calculate", s);
    }
}

我有很多“量化”字段,每个组(A、B 等)都会有类似的计算。字段名称为“Quant A1”、“Quant A2”等。Quant A1 需要使用 Span A1 的输入进行计算。

在上面的脚本中,如果我可以在脚本字符串中有一个变量,我可以将一个值 (n) 插入到字符串中,那将非常酷,基本上与函数调用的工作方式相同。

这可能吗?

这是我想象中的幻想版本(这只是为了进一步解释我的意图;我认为这实际上不会这样工作):

var s(x) = "if(this.getField(\"Span A\""x").value >= 60){\n\
    event.value = Math.round(((this.getField(\"Span A\""x").value*41500 - 1674500)/233));\n\
}else{\n\
    event.value = Math.round((this.getField(\"Span A\""x").value*3500/60));\n\
}";

for (var i = 0; i < this.numFields; i++){
    var f = this.getField(getNthFieldName(i));
    if(f.name.match(/quant a/i) != null){
        var n = f.name.match(/\d/g);
        f.setAction("Calculate", s(n));
    }
}

标签: javascript

解决方案


如果您使用的是 ES6 及更高版本,则可以使用字符串文字。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals?retiredLocale=nl

const greetings = "I'm a variable!";
let string = `Hi! this is a variable: ${greetings}`;

console.log(string);

否则将其与 + 运算符连接。


推荐阅读