#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 и т. Д.) Будет иметь аналогичный расчет. Поля называются «Квант А1», «Квант А2» и т.д. Квант A1 должен вычисляться с использованием входных данных из диапазона 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));
}
}
Комментарии:
1. Вы пытаетесь заново изобрести строки шаблонов ?
2. Как упоминалось выше, строки шаблона-это способ сделать это. Однако зачем вам нужна такая строка кода? Если вы планируете использовать
eval()
, я бы настоятельно рекомендовал отказаться от этого.3. вы можете сделать это только с помощью вызова функции, хотя шаблонные литералы значительно упростили бы это
4. Не изобретать заново, но, может быть, открыть? Я не знал о шаблонных литералах. Может ли кто-нибудь помочь мне понять, как бы я использовал это в данном контексте? Я ни в коем случае не являюсь профессиональным программистом.
Ответ №1:
Вы можете использовать строковые литералы, если используете 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);
В противном случае соедините его с оператором .
Ответ №2:
Если я правильно понял ваш вопрос. Я думаю, вы хотите использовать шаблонные литералы. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
Используйте обратные ссылки вместо «или», чтобы вставлять свои переменные в строку.
const a ='Cheese'
const b= 'is Delicious'
${a} ${b}
выведет «Сыр вкусный»