BenYolları
var obj = {
animal: "${animal}"
};
var res = magic(obj, {animal: "cat"});
// res => {animal: "cat"}
magic
aşağıdaki yapmak istiyorum nesneleri kirli işlerini yapan bazı fonksiyonudur. Açıkça obj
, birden çok tuş, iç içe geçmiş diziler vb. Ile daha karmaşık olabilir. Şablon değişkeni bu
var obj = {
animals: ["cat", "dog", "${animal}", "cow"]
};
gibi bir dizi içinde olabilir ve her yerde bu kadar basit obj.animals[2] = "bat";
yapıyor dizide mümkün değildir olabilir.
İstediğim şeyi alabildiğim underscore-tpl library'u buldum, ancak gelecekteki başvurular için başka çözümler olup olmadığını bilmek istiyorum ve çünkü ilk etapta alt-çizgi bulmakta zorlandım.
Benim asıl kullanım örneği ben JSON.parse(...)
kullanarak bu consig.json ayrıştırmak aşağıdaki
{
"task1": {
"command": "command-line-program",
"args": [
"--input", "{{input}}",
"--flag1",
"--output", "{{output}}",
"--flag2",
],
"options": {
"cwd": "path-to-working-dir"
}
}
}
gibi çeşitli bildirimleri var bir config.json dosyası var ve ben command
, args
ile require("child_process").spawn
dediğimiz olmasıdır ve dosyada bildirilen options
parametreleri, ancak args
çok fazla, bayrak eklenmiş, yeniden düzenlenmiş ve malzeme değiştirir, bu nedenle yapmak spawn
çağırır kodu değiştirmeyi içerir ve bu alırken hataya eğilimli olduğunu.
Güncelleme
benim projelerde içerebilir basit bir paket (located here) oluşturuldu, bunu kullanmaktan çekinmeyin ettik the accepted answer dayanarak.
function magic(o, a) {
var j = JSON.stringify(o);
for (var k in a) {
j = j.split('${'+k+'}').join(a[k]);
}
return JSON.parse(j);
}
Neden sadece "hayvan: res.animal" değil? Daha büyük bir dizenin ortasındaki enterpolasyona ihtiyacınız varsa, ES2015 [şablon dizgileri] (http://es6-features.org/#StringInterpolation) kontrol edin. * edit * oh Tamam Ne çektiğini görüyorum. – Pointy
JS şablon motorlarını arayın. Site dışı kaynakların, kütüphanelerin, vb. Sorulmasının aslında OT için OT olduğunu unutmayın. –
@DaveNewton Peki, bu her zaman en iyisi değil, SADECE soruyu itiraf ediyorum :) Gerçekten sadece bir şey koymak istedim, böylece ben (ve diğerleri) daha kolay bulabilirdim, çünkü zor bir zaman buldum Bunun için ağrısız bir çözüm. –