如何将模板字面量的结果保存到对象中?

时间:2019-05-24 14:24:25

标签: javascript

我有一些模板文字作为json文件中的值。当我访问这些值时,我需要变量的值而不是模板文字的字符串。

我尝试像这样添加反引号(`),但没有用:

value = '`' + value + '`';

这是我要运行的代码的一部分:

const map = require('./mapping.json');

// declared here for testing
const engagement_id = '000909000132';
const start_date = '08/08/2011';

let obj = {};
for (let header in map) {
    value = map[header].value;

    // Do other things

    obj[header] = value;
}

我的mapping.json看起来像这样:

{
    "C_ID": {
    "value": "16520780,${engagement_id}"
    },
    "C_DATE": {
    "value": "${start_date}",
    "format": "mm/dd/yy",    
    },
    "SURV_TYPE": {
    "value": "S"
    }
}

console.log(obj)给我这个:

{ C_ID: '16520780,${engagement_id}',
  C_DATE: '${start_date}',
  SURV_TYPE: 'S' }

但是我想要的是对象具有这样的变量的实际值:

{ C_ID: '16520780,000909000132',
  C_DATE: '08/08/2011',
  SURV_TYPE: 'S' }

2 个答案:

答案 0 :(得分:0)

模板文字是JavaScript源代码的一部分。

您不能将JavaScript源代码放在字符串中然后使用它:它是数据,而不是代码。

您可以使用eval(),但这会带来很多问题和安全风险。

改为使用模板库。例如,Nunjucks

const map = {
  "C_ID": {
    "value": "16520780,{{engagement_id}}"
  },
  "C_DATE": {
    "value": "{{start_date}}",
    "format": "mm/dd/yy",
  },
  "SURV_TYPE": {
    "value": "S"
  }
};

const engagement_id = '000909000132';
const start_date = '08/08/2011';

let obj = {};
for (let header in map) {
  const value = nunjucks.renderString(map[header].value, {
    engagement_id,
    start_date
  })
  obj[header] = value;
}

console.log(obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/nunjucks/3.0.1/nunjucks.min.js"></script>

答案 1 :(得分:0)

您可以将String.replace()与一个函数一起使用以返回相应的值:

const map = {
    "C_ID": {
    "value": "16520780,${engagement_id}"
    },
    "C_DATE": {
    "value": "${start_date}",
    "format": "mm/dd/yy",    
    },
    "SURV_TYPE": {
    "value": "S"
    }
};

const values = {
  engagement_id: '000909000132',
  start_date: '08/08/2011',
};

const replacer = (match, p1) => (values[p1]);

let obj = {};
for (let header in map) {
    value = map[header].value.replace(/\${(.+)}/, replacer);

    // Do other things

    obj[header] = value;
}

console.log(obj);