Go 並沒有內建 filter()
,但 Hugo 則提供 where()
類似 filter()
功能。
Version
Hugo 0.126.2
Template
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{{ $title := "Hugo Lab" }}
<title>{{ $title }}</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<!doctype html>
<html lang="en">
<body>
{{ $companies := slice
(dict "name" "apple")
(dict "name" "google")
(dict "name" "microsoft")
}}
{{ $companies = where $companies "name" "eq" "apple" | first 1 }}
<ul>
{{ range $companies }}
<li>{{ .name }}</li>
{{ end }}
</ul>
</body>
</html>
</body>
</html>
Line 14
{{ $companies := slice
(dict "name" "apple")
(dict "name" "google")
(dict "name" "microsoft")
}}
slice()
:定義$companies
slicedict()
:定義 map
Line 19
{{ $companies = where $companies "name" "eq" "apple" | first 1 }}
where()
:類似 JavaScript 的filter()
- 第一個參數:傳入 Collection 名稱
- 第二個參數:傳入 function 名稱,必須以 String 形式傳入,而非 function
- 第三個參數:比較條件
where()
會回傳所有符合條件的 slice,可在 pipefirst 1
取得第一筆資料
Line 20
<ul>
{{ range $companies }}
<li>{{ .name }}</li>
{{ end }}
</ul>
range()
:列舉 slice
Conclusion
where()
因為必須搭配 key,因此只能使用於 Slice of Map, 而不能用於 Slice of Scalar,