2016-03-25 28 views
1

Şablon değişmezlerini kullanırken tablo formatlarında bir sorun olduğunu farkettim.Şablon değişmez enterpolasyon boşlukları beyaz boşluk tablo

böyle bir şey yaparken:

Hello World 
    Goodbye  World 

Bu daha da karmaşık için yapılır: {güle} parçası olarak dize baskılar 'Goodbye' dört harf kısa olduğu için

var hello = 'Hello', 
    bye = 'Goodbye'; 
console.log(` 
    ${hello} World 
    ${bye}  World 
`); 

diziler veya nesnelerin interpolasyonları.

Bu tür bir problemle başa çıkmanın bir yolunu bulup bulmadığını merak ediyorum. Bir dizge için aralıklı tablo biçimlendirmesi enterpolasyon sırasında tutulabilir.


1 Şimdi bir şablon etiketinin dizeleri ve dizileri kullandığını varsayalım. Diziler, kelimeler arasındaki boşluklarla birleştirilmiştir.

var hello = 'Hello', 
    bye = 'Goodbye', 
    phrase = ['I', 'like']; 

console.log(someTag` 
    ${hello}   World 
    ${bye}   World 
    Some things I like: 
    ${phrase}  sunsets. 
    ${['I', 'like']} candy. 
`); 

Eğer Array köşeli parantez, tırnak, dolar, küme ayracı ve böylece enterpolasyondan önce dize (görsel) uzunluğuna doğru sayıp söyleyemem Sadece durumda. Kelimeler arasındaki boşluklar enterpolasyondan sonra dize uzunluğuna doğru sayılır. Girintiler, ekstra karakterlerin kaybı ve etiket işleme sırasında karakterlerin eklenmesiyle gerçekleştirilir.

Bu sorunun cevabı kabul edildi, ancak daha fazla tartışma görmek istiyorum. Bu sorunun birden fazla cevabı olabilir.

+0

nasıl şablon dizeleri olmadan bu çözecektir? – thefourtheye

+0

Çok eğlenceli. Bu tür bir şey için tablo biçimlendiricileri ve dolgu malzemeleri var, ama aynı soruyu beyaz alan için nazik olduğu bilinen şablon dizgilerle beklemiyordum. Dahası, eğer eklentiler başka bir etiket fonksiyonu tarafından isteniyorsa ve bir tablo formatlayıcı/padder sadece bir string üretir. Evet sorun başka yerde çözüldü, ancak bu şablon değişmezleri için tamamen yeni bir sorun. Sanırım diğer seçenek bu tür şeyler için onları kullanmamak. –

+0

Şablon değişmezleri, varsayılan olarak boşluklarla ilgili hiçbir şey yapmazlar, aslında, enterpolasyonlu dizeler gibi davranırlar. Daha gelişmiş davranışlar istiyorsanız, aradığınız dönüşümü yapmak için etiketli bir şablon hazırlaması kullanmanız gerekir. – loganfsmyth

cevap

1

Kelimelerin değişen uzunlukta telafi etmek sekmeleri kullanabilirsiniz:

const hello = 'Hello'; 
 
const bye = 'Goodbye'; 
 
const str = ` 
 
    ${hello}\t World 
 
    ${bye}\t World 
 
`; 
 

 
console.log(str); 
 
document.getElementById('demo').innerText = str;
<pre id="demo"></pre>

+0

Bu kolay bir çözümdür. Teşekkür ederim. Girinti bilinmeyen (boşluk yerine) bir kitaplığa geçtiyse ne olur? Bazen bir sekme görsel olarak 4 boşluktur ve bazen 8 belki de 2'dir. Sekmeler içeren boşlukların yerine geçmeye çalışılırsa, bu durum da müdahale edebilir. Sekme karakterleri yoksa bir hata atılabileceğini sanıyorum, ama bilinmeyen beyaz alan sorununa bir çözüm olmasını umuyorum. –

+0

Bir sekmeyi ve birden çok alanı birleştirebilirsiniz. Sekme, dizenin değişen uzunlukları ile istenen dolgu arasındaki boşluklar arasındaki boşluğu kapsayacaktır. Mükemmel olmayacak, ama ihtiyacın olana yakın olacak. –

+0

Dize her zaman aynı olacağını bildiğiniz sürece çalışan çok sayıda küçük ince ayar vardır. Bana html, ama komut satırı çıkışı için bir şey olsaydı. –

İlgili konular