truncate

رشته را تا بیشترین طول کوتاه می‌کند و جای برش را با سه‌نقطه نشان می‌دهد. با یونی‌کد سرِ سازگاری دارد و می‌داند که کدام سر را نگه دارید معنای کوتاه‌سازی را عوض می‌کند.

کاربرد

import { truncate } from 'ranuts/utils';

truncate('the quick brown fox', 12); // 'the quick b…'

truncate('/Users/me/code/app/src/index.ts', { length: 20, position: 'start' });
// '…de/app/src/index.ts'

truncate('0xabcdef0123456789', { length: 11, position: 'middle' });
// '0xabc…56789'

API

truncate(value, options)

پارامترها

پارامتر توضیح نوع پیش‌فرض
value رشته‌ای که کوتاه می‌شود string الزامی
options عددِ تنها، شکل کوتاه‌شدهٔ { length } است TruncateOptions | number الزامی

TruncateOptions

میدان توضیح نوع پیش‌فرض
length بیشترین طول نتیجه، با احتساب سه‌نقطه number
position کدام سر باقی می‌ماند — پایین‌تر را ببینید 'end' | 'start' | 'middle' 'end'
ellipsis نشانه‌ای که سر برش گذاشته می‌شود string '…'

position تعیین می‌کند کدام سر باقی بماند، و این گزینش خبر واقعی با خود دارد:

  • 'end' (پیش‌فرض) آغاز را نگه می‌دارد؛ درخورِ نثر و عنوان.
  • 'start' دنباله را نگه می‌دارد، و مسیر فایل همین را می‌خواهد: /Users/someone/work/… همان بخشی است که خواننده از پیش می‌داند و …/src/utils/str.ts همان بخشی که به آن نیاز دارد.
  • 'middle' هر دو سر را نگه می‌دارد؛ برای شناسه‌هایی که سر و دنباله‌شان معنا دارد، مانند یک درهم یا شمارهٔ حساب.

بازگشت

string؛ هرگز بلندتر از length نمی‌شود. اگر length از خودِ سه‌نقطه کوتاه‌تر باشد، به‌جای سرریز، سه‌نقطه کوتاه می‌شود.

یادداشت‌ها

  1. برش بر پایهٔ نقطه‌کدهای یونی‌کد است، نه واحدهای UTF-16. value.slice(i)ِ ساده‌دلانه می‌تواند وسط یک جفت جانشین بیفتد: هر نویسهٔ بیرون از صفحهٔ پایهٔ چندزبانی (ایموجی، برخی نویسه‌های گسترش CJK) دو واحد UTF-16 است و کنار سه‌نقطه یک جانشین بی‌قرین به جا می‌گذارد که به شکل نویسه‌های درهم دیده می‌شود. truncate به‌جای آن روی نقطه‌کدها پیش می‌رود، پس نویسه‌های چندواحدی هرگز شکافته نمی‌شوند.
  2. valueِ کوتاه‌تر از length دست‌نخورده برمی‌گردد و سه‌نقطه‌ای افزوده نمی‌شود.
  3. اگر نویسهٔ پیش‌فرض '…' در قلمی که با آن ترسیم می‌کنید نباشد، ellipsis دلخواه خود را بدهید (مثلاً '...' یا '[cut]').