Jekyll中如何访问按ID筛选后的多维数组单个元素?
问题:如何访问Jekyll中通过where筛选得到的单条数组元素?
我在Jekyll数据文件中有一组从CSL导出为YAML的参考条目,示例格式如下:
references: - id: palazzo:2021vernacular accessed: - year: 2021 month: 11 day: 10 author: - family: Palazzo given: Pedro P. citation-key: palazzo:2021vernacular container-title: Journal of Traditional Building, Architecture and Urbanism DOI: 10.51303/jtbau.vi2.524 ISSN: 2660-583X issue: '2' issued: - year: 2021 month: 11 day: 10 language: en page: 359-370 source: traditionalarchitecturejournal.com title: 'Vernacular patterns in Portugal and Brazil: evolution and adaptations' type: article-journal URL: https://traditionalarchitecturejournal.com/index.php/home/article/view/524
我用以下代码筛选单条记录,但得到的是一个数组(即使只有一条匹配结果):
{% assign citekey = page.citekey %} {% assign work = site.data.bibliography.references | where: "id", citekey %}
请问如何直接访问这个数组中的单个元素?
解决方案
Jekyll的where过滤器会返回所有匹配条件的元素组成的数组,哪怕只有一条结果。要获取单个元素,有两种简单方法:
方法1:用first过滤器提取数组第一个元素
直接在筛选后追加first过滤器,就能拿到数组里的第一条(也是唯一一条)元素:
{% assign citekey = page.citekey %} {% assign work = site.data.bibliography.references | where: "id", citekey | first %}
之后你就可以直接通过work.title、work.author等字段访问元素内容了。
方法2:用find过滤器直接获取单个匹配元素
如果你确定只会有一条匹配结果,更推荐用find过滤器——它会直接返回第一个符合条件的单个元素,无需再处理数组:
{% assign citekey = page.citekey %} {% assign work = site.data.bibliography.references | find: "id", citekey %}
补充说明
- 如果需要验证是否拿到了正确的元素,可以用
{{ work | inspect }}输出元素的完整结构来调试。 - 若存在多条匹配记录,
first和find都会返回第一条;如果需要处理多条结果,才需要保留数组形式遍历。
内容的提问来源于stack exchange,提问作者Pedro Palazzo
相关产品推荐
相关产品推荐

