Bài viết này mình sẽ giới thiệu về padStart
và padEnd
và 1 số thông tin về chúng.
1 2 3 4 5 6 | <span class="token keyword">const</span> string <span class="token operator">=</span> <span class="token string">'hi'</span><span class="token punctuation">;</span> string<span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'c'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "chi"</span> string<span class="token punctuation">.</span><span class="token function">padEnd</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'l'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "hill"</span> |
1. Syntax
Cú pháp của String Pad
khá là đơn giản:
1 2 3 4 | string<span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token operator"><</span>targetLength<span class="token operator">></span><span class="token punctuation">,</span> <span class="token operator"><</span>padString<span class="token operator">></span><span class="token punctuation">)</span><span class="token punctuation">;</span> string<span class="token punctuation">.</span><span class="token function">padEnd</span><span class="token punctuation">(</span><span class="token operator"><</span>targetLength<span class="token operator">></span><span class="token punctuation">,</span> <span class="token operator"><</span>padString<span class="token operator">></span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
2. Understanding the Parameters
2 phương thức padEnd
và padStart
đều nhận vào các parameters
tương tự nhau
2.1. targetLength
Độ dài của chuỗi kết quả khi str
hiện tại được pad
. Nếu độ dài của str
lớn hơn targetLength
thì kết quả trả về vẫn là str
(không bị thay đổi)
1 2 3 4 5 6 | <span class="token keyword">let</span> result <span class="token operator">=</span> <span class="token string">'str'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> result<span class="token punctuation">.</span>length<span class="token punctuation">;</span> <span class="token comment">// 5</span> result <span class="token operator">=</span> <span class="token string">'12345678'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> result<span class="token punctuation">.</span>length<span class="token punctuation">;</span> <span class="token comment">// 8</span> |
Note: targetLength
không phải số lần str
được pad
2.2. padString
padString
là chuỗi dùng để pad
hiện tại. Nếu không set padString
thì nó sẽ nhận giá trị default là " "
(U+0020 ‘SPACE’).
1 2 3 4 5 6 | <span class="token string">'hi'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Same as</span> <span class="token string">'hi'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">' '</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token string">'abc'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token string">"123465"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "123abc"</span> |
Nếu bạn truyền vào empty string
, thì nó sẽ không làm gì cả :v
1 2 3 4 5 | <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token string">'hi'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span> result<span class="token punctuation">;</span> <span class="token comment">// ''</span> result<span class="token punctuation">.</span>length<span class="token punctuation">;</span> <span class="token comment">// 2</span> |
Nếu padString
dài dẫn tới kết quả trả về dài
hơn targetLength
thì nó sẽ được truncated
từ cuối
lên đầu
của padString
.
1 2 3 | <span class="token string">'hi'</span><span class="token punctuation">.</span><span class="token function">padEnd</span><span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> <span class="token string">'SAMANTHA'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hiSAMAN'</span> |
How it handles other data types
Như đã nói ở trên, kiểu của parameter
thứ 2 truyền vào là string
. Tuy nhiên bạn vẫn có thể truyền giá trị kiểu khác vào, nó sẽ tự động convert thành string
thông qua phương thức toString()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token comment">// NUMBER</span> <span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '100'</span> <span class="token comment">// BOOLEAN</span> <span class="token boolean">true</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'true'</span> <span class="token boolean">false</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'false'</span> <span class="token comment">// ARRAY</span> <span class="token punctuation">[</span><span class="token string">'A'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'A'</span> <span class="token punctuation">[</span><span class="token string">''</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ''</span> <span class="token comment">// OBJECT</span> <span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '[object Object]'</span> <span class="token punctuation">(</span><span class="token punctuation">{</span>hi<span class="token operator">:</span> <span class="token string">'hi'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '[object Object]'</span> |
Ở trên là kết quả của toString()
cho 1 số kiểu dữ liệu.
1 2 3 4 5 6 7 8 9 10 11 | <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '10010SAM'</span> <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'truetSAM'</span> <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'falseSAM'</span> <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">''</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'SAM'</span> <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'hi'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 'hiSAM'</span> <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">18</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '[object Object]SAM'</span> <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">18</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>hi<span class="token operator">:</span> <span class="token string">'hi'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// '[object Object]SAM'</span> |
Handling undefined
Có 1 điểm khá thú vị, khi bạn convert undefined
sang string
bằng toString
thì bạn sẽ gặp lỗi TypeError
:
1 2 | <span class="token keyword">undefined</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// TypeError: Cannot read property 'toString' of undefined</span> |
Tuy nhiên, nếu bạn truyền undefined
như padString
thì bạn sẽ không gặp lỗi:
1 2 3 | <span class="token string">'SAM'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token keyword">undefined</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ' SAM'</span> |
Tại sao nhỉ? Theo như spec:
ECMAScript Spec If fillString is undefined, let filler be the String value consisting solely of the code unit 0x0020 (SPACE).
=> Khi bạn truyền giá trị khác undefined
(dĩ nhiên là khác cả string
) nó sẽ tự động convert giá trị truyền vào thành string
thông qua phương thức toString()
Use Case
Tabular Formatting with padEnd
Một trong những ứng dụng của string pad
thường được dùng đó là là formatting
1 2 3 4 | <span class="token string">'abc'</span><span class="token punctuation">.</span><span class="token function">padEnd</span><span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// abc...</span> |
Right Aligning String with padStart
Căn trái / phải với padStart
và padEnd
mà không dùng css
1 2 3 4 5 | console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'JavaScript'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'HTML'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'CSS'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Vue'</span><span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Kết quả sẽ là:
1 2 3 4 5 | JavaScript <span class="token constant">HTML</span> <span class="token constant">CSS</span> Vue |
Receipt formatting
Bạn cũng có thể căn đều 2 bên text (vẫn không dùng css
)
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">const</span> purchase <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span><span class="token string">'Masks'</span><span class="token punctuation">,</span> <span class="token string">'9.99'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'Shirt'</span><span class="token punctuation">,</span> <span class="token string">'20.00'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'Jacket'</span><span class="token punctuation">,</span> <span class="token string">'200.00'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'Gloves'</span><span class="token punctuation">,</span> <span class="token string">'10.00'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> purchase<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">[</span>item<span class="token punctuation">,</span> price<span class="token punctuation">]</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>item <span class="token operator">+</span> price<span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span><span class="token number">20</span> <span class="token operator">-</span> item<span class="token punctuation">.</span>length<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Kết quả:
1 2 3 4 5 | Masks <span class="token number">9.99</span> Shirt <span class="token number">20.00</span> Jacket <span class="token number">200.00</span> Gloves <span class="token number">10.00</span> |
Masking Numbers
Một ứng dụng nữa của nó là masking number
, hiểu đơn giản là ẩn 1 số thành phần của 1 dãy số (thường là card number
)
1 2 3 4 5 6 | <span class="token keyword">const</span> bankNumber <span class="token operator">=</span> <span class="token string">'2222 2222 2222 2222'</span><span class="token punctuation">;</span> <span class="token keyword">const</span> last4Digits <span class="token operator">=</span> bankNumber<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> last4Digits<span class="token punctuation">.</span><span class="token function">padStart</span><span class="token punctuation">(</span>bankNumber<span class="token punctuation">.</span>length<span class="token punctuation">,</span> <span class="token string">'*'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ***************2222</span> |
Browser Support
padStart
và padEnd
được giới thiệu đồng thời và nó hỗ trợ các browser giống nhau – tất cả browser ngoại trừ Internet Explorer
Browser | |
---|---|
Chrome | ✅ |
Firefox | ✅ |
Safari | ✅ |
Edge | ✅ |
Internet Explorer | ❌ |
Reference
https://www.samanthaming.com/tidbits/97-string-padstart-padend/