【问题标题】:How to pass dictionary inside template literal in JS如何在JS中的模板文字内传递字典
【发布时间】:2023-03-11 11:03:01
【问题描述】:

如何在模板文字中传递整个字典? 这是我的代码:

var pvtInPlan = treatmentPlan.pavementIDs;
var pcrAfterPlan = treatmentPlan.pavementCondition;
var yearlyPlan = {};
pvtInPlan.forEach((key, i) => yearlyPlan[key] = pcrAfterPlan[i]);  // I want to pass this yearlyPlan 

var arcadeExpression = `
                                    var plan = ${yearlyPlan};   
                                    var pvtID = 100;
                                    return plan[pvtID]`; // I want to be able to return such statement.

每当我使用 'var plan = ${yearlyPlan};'行,它给我带来了错误。它在我使用 'var plan = ${yearlyPlan[100]};' 时有效直接地。但我需要从模板文字内部将索引传递给这个字典。

如果有人可以帮助我,我会很高兴。 谢谢!

【问题讨论】:

  • 试试var plan = ${JSON.stringify(yearlyPlan)};
  • 为什么要将代码构造为字符串?不要这样做,您将避免对象序列化的任何问题。
  • 我想用这个表达式来过滤 ArcGIS for JS 中的特征。它要求我们从这个模板文字中为每个特征传递特定的值。

标签: javascript arrays template-literals


【解决方案1】:

如果你想转储整个内容,你可以做一个简单的JSON.stringify,例如:

const yearlyPlan = JSON.stringify({ key1: 'content', key2: 'content2' })
const arcadeExpression = `
                                    var plan = ${yearlyPlan};   
                                    var pvtID = 100;
                                    return plan[pvtID]`; // I want to be able to return such statement.

console.log(arcadeExpression)
>>> 
"var plan = {"key1":"content","key2":"content2"};   
var pvtID = 100;
return plan[pvtID]"

如果您想要一个更自定义的版本,那么您需要访问每个键值对来格式化消息。

【讨论】:

    【解决方案2】:

    感谢您的回复。我尝试使用 stringify,它传递了里面的全部内容,但它不返回给定索引的值(例如,这里的 pvtID=100)。我尝试在模板文字中使用 JSON.parse 将其恢复为对象,但它会引发与以前相同的错误。

    var pvtInPlan = treatmentPlan.pavementIDs;
                      var pcrAfterPlan = treatmentPlan.pavementCondition;
                      var yearlyPlan = {};
                      pvtInPlan.forEach((key, i) => yearlyPlan[key] = pcrAfterPlan[i]);
     var arcadeExpression = `
                                        var plan = ${JSON.stringify(yearlyPlan)};
                                        var planObj = JSON.parse(plan);
                                        var pvtID = 100;
                                        return planObj[pvtID]`; //This line should return the value corresponding to the index 'pvtID'
                      

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 2021-09-08
      相关资源
      最近更新 更多