2017-03-06 341 views
0

我有像下面的示例模板我想用json对象值替换学校,babydet.name,dept,babydet.section.secname如何做到这一点,请帮我解决这个问题。用json对象替换动态字符串模板变量

var Template1 = 'Welcome to the {{school}} baby {{babydet.name}}' 
var Template2 = 'Welcome to the school {{school}} department {{dept}} babydetails {{babydet.name}} {{babydet.section.secname}}' 

const namelist1= [{school:'GOVSchool',babydet: { name: 'shanker' }}]; 
const namelist2= [{school:'GOVSchool',dept:'CS',babydet: { name: 'shanker',section:{sectname:'A Section'}}}]; 

在字符串替换的帮助下需要实现这个(单一逻辑)。输出希望像这样“欢迎来到世界的婴儿sha”“

+1

JSON是用于数据交换的*文本符号*。 [(More。)](http://stackoverflow.com/a/2904181/157247)如果你正在处理JavaScript源代码,而不是处理*字符串*,那么你不会处理JSON。那些只是对象。 –

回答

2

如果有任何机会,lodash.js可用,您可以使用它的_.template函数。更多详情here

var Template1 = 'Welcome to the {{school}} baby {{babydet.name}}' 
 
var Template2 = 'Welcome to the school {{school}} department {{dept}} babydetails {{babydet.name}} {{babydet.section.secname}}' 
 

 
var namelist1= [{school:'GOVSchool',babydet: { name: 'shanker' }}]; 
 
var namelist2= [{school:'GOVSchool',dept:'CS',babydet: { name: 'shanker',section:{sectname:'A Section'}}}]; 
 

 
_.templateSettings.interpolate = /{{([\s\S]+?)}}/g; 
 
var interpolator = _.template(Template1); 
 
var interpolated = interpolator(namelist2[0]); 
 

 
console.log(interpolated) 
 

 
interpolator = _.template(Template2); 
 
interpolated = interpolator(namelist2[0]); 
 

 
console.log(interpolated)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

0

你可能使用ES6 Template literals插值的字符串。为了回答你提出的问题,我将做出一些基本的假设(并对这个例子进行硬编码):你的namelist变量是从JSON数据解析的某个对象的替身,你知道它的结构,您知道如何遍历数据数组以使这个解决方案真正有用。

模板面值括与反引号“'”,而不是报价,而你周围的变量与${/* reference variable */}

const namelist1= [{school:'GOVSchool',babydet: { name: 'shanker' }}]; 
const namelist2= [{school:'GOVSchool',dept:'CS',babydet: { name: 'shanker',section:{sectname:'A Section'}}}]; 

let Template1 = `Welcome to the ${namelist1[0].school} baby ${namelist1[0].babydet.name}`; 
let Template2 = `Welcome to the school ${namelist2[0].school} department ${namelist2[0].dept} babydetails ${namelist2[0].babydet.name} ${namelist2[0].babydet.section.sectname}`; 
0

我在做类似的事情,唯一的区别是我的JSON对象不会有嵌套的属性。

我正在使用一种简单的方法(希望不要太简单)。它可以接受任何数量的属性在HTML模板中被替换。

给定一个模板:

let template = 
    '<div><span>{{ text }}</span><span>{{description}}</span></div>'; 

和一些数据:

let data = { text: 'My Text', description: 'my description' }; 

我会得到:

<div><span>My Text</span><span>my description</span></div> 

在这里看到JSBin实现:https://jsbin.com/zelogof/7/edit?js,console

要建议也欢迎!