ตัวกรองช่วยให้คุณสามารถปรับเปลี่ยน[[ตัวแปร|ตัวแปร]]ใน[[Obsidian Web Clipper/เทมเพลต|เทมเพลต Web Clipper]] ตัวกรองจะถูกนำไปใช้กับตัวแปรโดยใช้ไวยากรณ์ `{{variable|filter}}` - ตัวกรองทำงานได้กับ[[ตัวแปร|ตัวแปร]]ทุกชนิด รวมถึงตัวแปร `prompt`, `meta`, `selector` และ `schema` - ตัวกรองสามารถต่อเรียงกันได้ เช่น `{{variable|filter1|filter2}}` และจะถูกนำไปใช้ตามลำดับที่เพิ่มเข้าไป ## วันที่ แปลงและปรับเปลี่ยนวันที่ ### `date` แปลงวันที่เป็นรูปแบบที่ระบุ [ดูข้อมูลอ้างอิง](https://day.js.org/docs/en/display/format) - `{{date|date:"YYYY-MM-DD"}}` แปลงวันที่ปัจจุบันเป็น "YYYY-MM-DD" - ใช้ `date:("outputFormat", "inputFormat")` เพื่อระบุรูปแบบอินพุต เช่น `"12/01/2024"|date:("YYYY-MM-DD", "MM/DD/YYYY")` แปลง "12/01/2024" และคืนค่า `"2024-12-01"` ### `date_modify` ปรับเปลี่ยนวันที่โดยการเพิ่มหรือลบระยะเวลาที่ระบุ [ดูข้อมูลอ้างอิง](https://day.js.org/docs/en/manipulate/add) - `"2024-12-01"|date_modify:"+1 year"` คืนค่า `"2025-12-01"` - `"2024-12-01"|date_modify:"- 2 months"` คืนค่า `"2024-10-01"` ### `duration` แปลงสตริงระยะเวลา ISO 8601 หรือวินาทีเป็นสตริงเวลาที่จัดรูปแบบแล้ว ใช้โทเค็น: `HH` (ชั่วโมงแบบเติมศูนย์), `H` (ชั่วโมง), `mm` (นาทีแบบเติมศูนย์), `m` (นาที), `ss` (วินาทีแบบเติมศูนย์), `s` (วินาที) - `"PT1H30M"|duration:"HH:mm:ss"` คืนค่า `"01:30:00"` - `"3665"|duration:"H:mm:ss"` คืนค่า `"1:01:05"` - การตั้งค่า `duration` โดยไม่มีพารามิเตอร์จะใช้ `HH:mm:ss` เมื่อเกิน 1 ชั่วโมง และ `mm:ss` เมื่อต่ำกว่า 1 ชั่วโมง - รองรับทั้งสตริงระยะเวลา ISO 8601 (เช่น `PT6702S`, `PT1H30M`) และวินาทีแบบธรรมดา ## การแปลงและการใช้ตัวพิมพ์ของข้อความ แปลงสตริงข้อความจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่ง ### `camel` แปลงข้อความเป็น `camelCase` ### `capitalize` ทำให้ตัวอักษรแรกเป็นตัวพิมพ์ใหญ่และแปลงส่วนที่เหลือเป็นตัวพิมพ์เล็ก เช่น `"hELLO wORLD"|capitalize` คืนค่า `"Hello world"` ### `decode_uri` ถอดรหัสสตริงที่เข้ารหัส URI เช่น `"%E4%BD%A0%E5%A5%BD"|decode_uri` คืนค่า `"你好"` - `"hello%20world"|decode_uri` คืนค่า `"hello world"` - คืนค่าสตริงเดิมหากถอดรหัสไม่สำเร็จ (เช่น ลำดับ URI ที่ไม่ถูกต้อง) ### `kebab` แปลงข้อความเป็น `kebab-case` ### `lower` แปลงข้อความเป็น `lowercase` ### `pascal` แปลงข้อความเป็น `PascalCase` ### `replace` แทนที่ข้อความที่ระบุ: - การแทนที่แบบง่าย: `"hello!"|replace:",":""` ลบเครื่องหมายจุลภาคทั้งหมด - การแทนที่หลายรายการ: `"hello world"|replace:("e":"a","o":"0")` คืนค่า `"hall0 w0rld"` - การแทนที่จะถูกนำไปใช้ตามลำดับที่ระบุ - ใช้ `""` เป็นค่าแทนที่เพื่อลบข้อความที่ระบุ - อักขระพิเศษรวมถึง `: | { } ( ) ' "` ควรใส่แบ็กสแลชนำหน้าเมื่อใช้ในคำค้นหา เช่น `\:` เพื่อค้นหาเครื่องหมายโคลอน รองรับนิพจน์ทั่วไปโดยใช้ไวยากรณ์ regex ของ JavaScript: - แทนที่สระทั้งหมด: `"hello world"|replace:"/[aeiou]/g":"*"` → `"h*ll* w*rld"` - ไม่คำนึงถึงตัวพิมพ์: `"HELLO world"|replace:"/hello/i":"hi"` → `"hi world"` - นิพจน์ทั่วไปหลายรายการ: `"hello world"|replace:("/[aeiou]/g":"*","/\s+/":"-")` → `"h*ll*-w*rld"` - แฟล็กที่ใช้ได้: `g` (ทั่วไป), `i` (ไม่คำนึงถึงตัวพิมพ์), `m` (หลายบรรทัด), `s` (dotAll), `u` (unicode), `y` (sticky) ### `safe_name` แปลงข้อความเป็นชื่อไฟล์ที่ปลอดภัย - โดยค่าเริ่มต้น `safe_name` จะใช้กฎการทำความสะอาดที่เข้มงวดที่สุด - สามารถใช้กฎเฉพาะระบบปฏิบัติการได้ด้วย `safe_name:os` โดย `os` สามารถเป็น `windows`, `mac` หรือ `linux` เพื่อใช้กฎสำหรับระบบปฏิบัติการนั้นเท่านั้น ### `snake` แปลงข้อความเป็น `snake_case` ### `title` แปลงข้อความเป็น `Title Case` เช่น `"hello world"|title` คืนค่า `"Hello World"` ### `trim` ลบช่องว่างจากทั้งสองด้านของสตริง - `" hello world "|trim` คืนค่า `"hello world"` ### `uncamel` แปลง camelCase หรือ PascalCase เป็นคำที่คั่นด้วยช่องว่าง ซึ่งคุณสามารถจัดรูปแบบเพิ่มเติมด้วยตัวกรองอื่น เช่น `title` หรือ `capitalize` - `"camelCase"|uncamel` คืนค่า `"camel case"` - `"PascalCase"|uncamel` คืนค่า `"pascal case"` ### `upper` แปลงค่าเป็นตัวพิมพ์ใหญ่ เช่น `"hello world"|upper` คืนค่า `"HELLO WORLD"` ## การจัดรูปแบบข้อความ ใช้[[ไวยากรณ์การจัดรูปแบบพื้นฐาน]]และ[[ไวยากรณ์การจัดรูปแบบขั้นสูง]]กับข้อความ ### `blockquote` เพิ่มคำนำหน้าคำคม Markdown (`> `) ในแต่ละบรรทัดของอินพุต ### `callout` สร้าง[[บล็อกเน้น|บล็อกเน้น]]พร้อมพารามิเตอร์เสริม: `{{variable|callout:("type", "title", foldState)}}` - `type` คือประเภทบล็อกเน้น มีค่าเริ่มต้นเป็น "info" - `title` คือชื่อบล็อกเน้น มีค่าเริ่มต้นเป็นว่าง - `foldState` คือค่าบูลีนสำหรับตั้งค่าสถานะการพับ (true สำหรับพับ, false สำหรับขยาย, null สำหรับไม่สามารถพับได้) ### `footnote` แปลงอาร์เรย์หรืออ็อบเจกต์เป็นรายการเชิงอรรถ Markdown - สำหรับอาร์เรย์: `["first item","second item"]|footnote` คืนค่า: `[^1]: first item` เป็นต้น - สำหรับอ็อบเจกต์: `{"First Note": "Content 1", "Second Note": "Content 2"}|footnote` คืนค่า: `[^first-note]: Content 1` เป็นต้น ### `fragment_link` แปลงสตริงและอาร์เรย์เป็นลิงก์ [text fragment](https://developer.mozilla.org/en-US/docs/Web/URI/Fragment/Text_fragments) มีค่าเริ่มต้นเป็น "link" สำหรับข้อความลิงก์ - `highlights|fragment_link` คืนค่า `Highlight content [link](text-fragment-url)` - `highlights|fragment_link:"custom title"` คืนค่า `Highlight content [custom title](text-fragment-url)` ### `image` แปลงสตริง อาร์เรย์ หรืออ็อบเจกต์เป็นไวยากรณ์รูปภาพ Markdown - สำหรับสตริง: `"image.jpg"|image:"alt text"` คืนค่า `![alt text](image.jpg)` - สำหรับอาร์เรย์: `["image1.jpg","image2.jpg"]|image:"alt text"` คืนค่าอาร์เรย์ของสตริงรูปภาพ Markdown ที่มีข้อความ alt เดียวกันสำหรับรูปภาพทั้งหมด - สำหรับอ็อบเจกต์: `{"image1.jpg": "Alt 1", "image2.jpg": "Alt 2"}|image` คืนค่าสตริงรูปภาพ Markdown ที่มีข้อความ alt จากคีย์ของอ็อบเจกต์ ### `link` แปลงสตริง อาร์เรย์ หรืออ็อบเจกต์เป็นไวยากรณ์ลิงก์ Markdown (ไม่ควรสับสนกับ [[ตัวกรอง#`wikilink`|wikilink]]) - สำหรับสตริง: `"url"|link:"author"` คืนค่า `[author](url)` - สำหรับอาร์เรย์: `["url1","url2"]|link:"author"` คืนค่าอาร์เรย์ของลิงก์ Markdown ที่มีข้อความเดียวกันสำหรับลิงก์ทั้งหมด - สำหรับอ็อบเจกต์: `{"url1": "Author 1", "url2": "Author 2"}|link` คืนค่าลิงก์ Markdown ที่มีข้อความตรงกับคีย์ของอ็อบเจกต์ ### `list` แปลงอาร์เรย์เป็นรายการ Markdown - `list` เพื่อแปลงเป็นรายการสัญลักษณ์แสดงหัวข้อย่อย - `list:task` เพื่อแปลงเป็นรายการงาน - `list:numbered` เพื่อแปลงเป็นรายการแบบลำดับเลข - `list:numbered-task` เพื่อแปลงเป็นรายการงานแบบลำดับเลข ### `table` แปลงอาร์เรย์หรืออาร์เรย์ของอ็อบเจกต์เป็น[[ไวยากรณ์การจัดรูปแบบขั้นสูง#ตาราง|ตาราง Markdown]]: - สำหรับอาร์เรย์ของอ็อบเจกต์ จะใช้คีย์ของอ็อบเจกต์เป็นหัวตาราง - สำหรับอาร์เรย์ของอาร์เรย์ จะสร้างตารางโดยมีแต่ละอาร์เรย์ย่อยเป็นแถว - สำหรับอาร์เรย์ธรรมดา จะสร้างตารางคอลัมน์เดียวที่มี "Value" เป็นหัวตาราง - สามารถระบุหัวคอลัมน์แบบกำหนดเองได้โดยใช้: `table:("Column 1", "Column 2", "Column 3")` เมื่อใช้กับอาร์เรย์ธรรมดา จะแบ่งข้อมูลเป็นแถวโดยอัตโนมัติตามจำนวนคอลัมน์ที่ระบุ ### `wikilink` แปลงสตริง อาร์เรย์ หรืออ็อบเจกต์เป็นไวยากรณ์[[เชื่อมโยงโน้ต|ลิงก์วิกิ]]ของ Obsidian - สำหรับสตริง: `"page"|wikilink` คืนค่า `[[page]]` - สำหรับสตริงที่มีนามแฝง: `"page"|wikilink:"alias"` คืนค่า `[[page|alias]]` - สำหรับอาร์เรย์: `["page1","page2"]|wikilink` คืนค่าอาร์เรย์ของลิงก์วิกิที่ไม่มีนามแฝง - สำหรับอาร์เรย์ที่มีนามแฝง: `["page1","page2"]|wikilink:"alias"` คืนค่าอาร์เรย์ของลิงก์วิกิที่มีนามแฝงเดียวกันสำหรับลิงก์ทั้งหมด - สำหรับอ็อบเจกต์: `{"page1": "alias1", "page2": "alias2"}|wikilink` คืนค่าลิงก์วิกิที่มีคีย์เป็นชื่อหน้าและค่าเป็นนามแฝง ## ตัวเลข ### `calc` ทำการคำนวณเลขคณิตพื้นฐานกับตัวเลข - รองรับตัวดำเนินการ: `+`, `-`, `*`, `/`, `**` (หรือ `^`) สำหรับการยกกำลัง - ตัวอย่าง: `5|calc:"+10"` คืนค่า `15` - ตัวอย่าง: `2|calc:"**3"` คืนค่า `8` (2 ยกกำลัง 3) - คืนค่าสตริงเดิมหากอินพุตไม่ใช่ตัวเลข ### `length` คืนค่าความยาวของสตริง อาร์เรย์ หรือจำนวนคีย์ในอ็อบเจกต์ - สำหรับสตริง: `"hello"|length` คืนค่า `5` - สำหรับอาร์เรย์: `["a","b","c"]|length` คืนค่า `3` - สำหรับอ็อบเจกต์: `{"a":1,"b":2}|length` คืนค่า `2` ### `round` ปัดเศษตัวเลขเป็นจำนวนเต็มที่ใกล้เคียงที่สุดหรือจำนวนตำแหน่งทศนิยมที่ระบุ - ไม่มีพารามิเตอร์: `3.7|round` คืนค่า `4` - ระบุจำนวนตำแหน่งทศนิยม: `3.14159|round:2` คืนค่า `3.14` ## การประมวลผล HTML ประมวลผลเนื้อหา HTML และแปลง HTML เป็น Markdown โปรดทราบว่า[[ตัวแปร|ตัวแปร]]อินพุตของคุณจะต้องมีเนื้อหา HTML เช่น การใช้ `{{fullHtml}}`, `{{contentHtml}}` หรือตัวแปร `{{selectorHtml:}}` ### `markdown` แปลงสตริงเป็นสตริงที่จัดรูปแบบตาม [[Obsidian Flavored Markdown]] - มีประโยชน์เมื่อใช้ร่วมกับตัวแปรที่คืนค่า HTML เช่น `{{contentHtml}}`, `{{fullHtml}}` และตัวแปร selector เช่น `{{selectorHtml:cssSelector}}` ### `remove_attr` ลบเฉพาะแอตทริบิวต์ HTML ที่ระบุจากแท็ก - ตัวอย่าง: `"<div class="test" id="example">Content</div>"|remove_attr:"class"` คืนค่า `<div id="example">Content</div>` - หลายแอตทริบิวต์: `{{fullHtml|remove_attr:("class,style,id")}}` ### `remove_html` ลบอิลิเมนต์ HTML ที่ระบุและเนื้อหาของมันจากสตริง - รองรับชื่อแท็ก คลาส หรือ id เช่น `{{fullHtml|remove_html:("img,.class-name,#element-id")}}` - หากต้องการลบเฉพาะแท็กหรือแอตทริบิวต์ HTML โดยไม่ลบเนื้อหา ให้ใช้ตัวกรอง `strip_tags` หรือ `strip_attr` ### `remove_tags` ลบเฉพาะแท็ก HTML ที่ระบุ เก็บเนื้อหาของแท็กไว้ - ตัวอย่าง: `"<p>Hello <b>world</b>!</p>"|remove_tags:"b"` คืนค่า `"<p>Hello world!</p>"` - หลายแท็ก: `{{fullHtml|remove_tags:("a,em,strong")}}` ### `replace_tags` แทนที่แท็ก HTML โดยคงเนื้อหาและแอตทริบิวต์ของแท็กไว้ - `{{fullHtml|replace_tags:"strong":"h2"}}` แทนที่แท็ก `<strong>` ทั้งหมดด้วย `<h2>` ### `strip_attr` ลบแอตทริบิวต์ HTML **ทั้งหมด**จากสตริง - ใช้ `strip_attr:("class, id")` เพื่อเก็บแอตทริบิวต์ที่ระบุไว้ - ตัวอย่าง: `"<div class="test" id="example">Content</div>"|strip_attr:("class")` คืนค่า `<div id="example">Content</div>` ### `strip_md` ลบการจัดรูปแบบ Markdown **ทั้งหมด**และคืนค่าสตริงข้อความธรรมดา เช่น เปลี่ยน `**text**` เป็น `text` - เปลี่ยนข้อความที่จัดรูปแบบแล้วเป็นข้อความธรรมดาที่ไม่มีการจัดรูปแบบ รวมถึงตัวหนา ตัวเอียง ไฮไลต์ หัวเรื่อง โค้ด บล็อกคำคม ตาราง รายการงาน และลิงก์วิกิ - ลบตาราง เชิงอรรถ รูปภาพ และอิลิเมนต์ HTML ออกทั้งหมด ### `strip_tags` ลบแท็ก HTML **ทั้งหมด**จากสตริง เนื้อหาภายในแท็กจะถูกเก็บไว้ - ใช้ `strip_tags:("p,strong,em")` เพื่อเก็บแท็กที่ระบุไว้ - ตัวอย่าง: `"<p>Hello <b>world</b>!</p>"|strip_tags:("b")` คืนค่า `Hello <b>world</b>!` ## อาร์เรย์และอ็อบเจกต์ ประมวลผลอาร์เรย์และอ็อบเจกต์ ### `first` คืนค่าสมาชิกตัวแรกของอาร์เรย์เป็นสตริง - `["a","b","c"]|first` คืนค่า `"a"` - หากอินพุตไม่ใช่อาร์เรย์ จะคืนค่าอินพุตโดยไม่เปลี่ยนแปลง ### `join` รวมสมาชิกของอาร์เรย์เป็นสตริง - `["a","b","c"]|join` คืนค่า `"a,b,c"` - สามารถระบุตัวคั่นแบบกำหนดเอง: `["a","b","c"]|join:" "` คืนค่า `"a b c"` ใช้ `join:"\n"` เพื่อคั่นสมาชิกด้วยการขึ้นบรรทัดใหม่ - มีประโยชน์เมื่อใช้หลัง `split` หรือ `slice`: `"a,b,c,d"|split:","|slice:1,3|join:" "` คืนค่า `"b c"` ### `last` คืนค่าสมาชิกตัวสุดท้ายของอาร์เรย์เป็นสตริง - `["a","b","c"]|last` คืนค่า `"c"` - หากอินพุตไม่ใช่อาร์เรย์ จะคืนค่าอินพุตโดยไม่เปลี่ยนแปลง ### `map` ใช้การแปลงกับแต่ละสมาชิกของอาร์เรย์โดยใช้ไวยากรณ์ `map:item => item.property` หรือ `map:item => item.nested.property` สำหรับคุณสมบัติที่ซ้อนกัน - `[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => item.gem` คืนค่า `["obsidian", "amethyst"]` - ใช้วงเล็บสำหรับ object literal และนิพจน์ที่ซับซ้อน: `map:item => ({key: value})` เช่น: `[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => ({name: item.gem, color: item.color})` คืนค่า `[{name: "obsidian", color: "black"}, {name: "amethyst", color: "purple"}]` รองรับ string literal ด้วย เช่น `["rock", "pop"]|map:item => "genres/${item}"` คืนค่า `["genres/rock", "genres/pop"]` ใช้ `map` ร่วมกับตัวกรอง `template` เช่น `map:item => ({name: ${item.gem}, color: item.color})|template:"- ${name} is ${color}\n"` สำหรับ string literal map ให้ใช้ `${str}` ในเทมเพลต เช่น `["rock", "pop"]|map:item => "genres/${item}"|template:"- ${str}"` หมายเหตุ: ไม่สามารถใช้ตัวกรองในตัวภายใน `map` ได้ ซึ่งหมายความว่าตัวอย่างเช่น การตัดช่องว่างแต่ละค่าของอาร์เรย์ไม่สามารถทำด้วย `map` ได้ ### `merge` เพิ่มค่าใหม่ลงในอาร์เรย์ - สำหรับอาร์เรย์: `["a","b"]|merge:("c","d")` คืนค่า `["a","b","c","d"]` - ค่าเดียว: `["a","b"]|merge:"c"` คืนค่า `["a","b","c"]` - หากอินพุตไม่ใช่อาร์เรย์ จะสร้างอาร์เรย์ใหม่: `"a"|merge:("b","c")` คืนค่า `["a","b","c"]` - สามารถใส่เครื่องหมายคำพูดให้ค่าได้: `["a"]|merge:('b,"c,d",e')` คืนค่า `["a","b","c,d","e"]` ### `nth` เก็บสมาชิกที่ n ในอาร์เรย์โดยใช้ไวยากรณ์แบบ CSS nth-child และรูปแบบกลุ่ม ตำแหน่งทั้งหมดเริ่มจาก 1 (สมาชิกตัวแรกคือตำแหน่ง 1) - `array|nth:3` เก็บเฉพาะสมาชิกตัวที่ 3 - `array|nth:3n` เก็บทุกสมาชิกตัวที่ 3 (3, 6, 9 เป็นต้น) - `array|nth:n+3` เก็บสมาชิกตัวที่ 3 และตัวถัดไปทั้งหมด ไวยากรณ์รูปแบบกลุ่มสำหรับโครงสร้างที่ซ้ำกัน: - `array|nth:1,2,3:5` เก็บตำแหน่ง 1, 2, 3 จากแต่ละกลุ่ม 5 รายการ ตัวอย่าง: `[1,2,3,4,5,6,7,8,9,10]|nth:1,2,3:5` คืนค่า `[1,2,3,6,7,8]` ### `object` จัดการข้อมูลอ็อบเจกต์: - `object:array` แปลงอ็อบเจกต์เป็นอาร์เรย์ของคู่คีย์-ค่า - `object:keys` คืนค่าอาร์เรย์ของคีย์ของอ็อบเจกต์ - `object:values` คืนค่าอาร์เรย์ของค่าของอ็อบเจกต์ - ตัวอย่าง: `{"a":1,"b":2}|object:array` คืนค่า `[["a",1],["b",2]]` ### `slice` ดึงส่วนหนึ่งของสตริงหรืออาร์เรย์ - สำหรับสตริง: `"hello"|slice:1,4` คืนค่า `"ell"` - สำหรับอาร์เรย์: `["a","b","c","d"]|slice:1,3` คืนค่า `["b","c"]` - หากระบุพารามิเตอร์เดียว จะตัดจากดัชนีนั้นจนถึงท้าย: `"hello"|slice:2` คืนค่า `"llo"` - ดัชนีลบนับจากท้าย: `"hello"|slice:-3` คืนค่า `"llo"` - พารามิเตอร์ตัวที่สองเป็นแบบ exclusive: `"hello"|slice:1,4` รวมอักขระที่ดัชนี 1, 2 และ 3 - การใช้พารามิเตอร์ตัวที่สองเป็นลบจะไม่รวมสมาชิกจากท้าย: `"hello"|slice:0,-2` คืนค่า `"hel"` ### `split` แบ่งสตริงเป็นอาร์เรย์ของสตริงย่อย - `"a,b,c"|split:","` คืนค่า `["a","b","c"]` - `"hello world"|split:" "` คืนค่า `["hello","world"]` - หากไม่ระบุตัวคั่น จะแบ่งทุกอักขระ: `"hello"|split` คืนค่า `["h","e","l","l","o"]` - สามารถใช้นิพจน์ทั่วไปเป็นตัวคั่น: `"a1b2c3"|split:[0-9]` คืนค่า `["a","b","c"]` ### `template` ใช้สตริงเทมเพลตกับอ็อบเจกต์หรืออาร์เรย์ของอ็อบเจกต์ โดยใช้ไวยากรณ์ `object|template:"Template with ${variable}"` - เข้าถึงคุณสมบัติที่ซ้อนกัน: `{"gem":{"name":"Obsidian"}}|template:"${gem.name}"` คืนค่า `"Obsidian"` - สำหรับอ็อบเจกต์: `{"gem":"obsidian","hardness":5}|template:"${gem} has a hardness of ${hardness}"` คืนค่า `"obsidian has a hardness of 5"` - สำหรับอาร์เรย์: `[{"gem":"obsidian","hardness":5},{"gem":"amethyst","hardness":7}]|template:"- ${gem} has a hardness of ${hardness}\n"` คืนค่ารายการที่จัดรูปแบบแล้ว ทำงานร่วมกับ string literal จาก `map` โดยใช้ `${str}`: - ตัวอย่าง: `["rock", "pop"]|map:item => "genres/${item}"|template:"- ${str}"` คืนค่ารายการที่จัดรูปแบบแล้ว ### `unique` ลบค่าที่ซ้ำกันจากอาร์เรย์และอ็อบเจกต์ - สำหรับอาร์เรย์ของค่าพื้นฐาน: `[1,2,2,3,3]|unique` คืนค่า `[1,2,3]` - สำหรับอาร์เรย์ของอ็อบเจกต์: `[{"a":1},{"b":2},{"a":1}]|unique` คืนค่า `[{"a":1},{"b":2}]` - สำหรับอ็อบเจกต์ จะลบคุณสมบัติที่มีค่าซ้ำกัน โดยเก็บคีย์ของรายการที่เกิดขึ้นล่าสุด - สำหรับสตริง จะคืนค่าอินพุตโดยไม่เปลี่ยนแปลง