【问题标题】:Nunjucks nested object array field printingNunjucks 嵌套对象数组字段打印
【发布时间】:2021-05-06 23:09:51
【问题描述】:

我的数组数据:

data = [
  { field: { name:"name1", title:"title1" } },
  { field: { name:"name2", title:"title2" } },
  { field: { name:"name3", title:"title3" } }
];

我想这样写name 字段:

预期输出

name1.name2.name3


我需要加入这些对象的指定字段值,但我不知道如何获取它们。

我尝试过但失败了 =>

data | selectattr("field") | selectattr("name") | join(".") }}

【问题讨论】:

    标签: templating nunjucks


    【解决方案1】:

    selectattr-仅过滤 filter data elements。因此,当您应用selectattr('name') 时,nunjucks 会尝试通过具有name 字段(都没有)的元素过滤data 并返回空结果。

    获得name1.name2.name3 的最简单方法是使用自定义过滤器

    const nunjucks  = require('nunjucks');
    const env = nunjucks.configure();
    
    env.addFilter('map', function (arr, prop, ...etc) {
        const f = typeof prop == 'function' ? 
            prop : typeof env.filters[prop] == 'function' ? 
            env.filters[prop] : (e) => e[prop]; 
    
        return arr instanceof Array && arr.map(e => f(e, ...etc)) || arr;
    });
    
    const data = [
      {field: {name: "name1", title: "title1"}},
      {field: {name: "name2", title: "title2"}},
      {field: {name: "name3", title: "title3"}}
    ];
    
    const html = env.renderString(`{{ data | map('field') | map('name') | join('.') }}`, {data});
    
    console.log(html);
    

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2018-07-04
      • 2020-08-25
      • 1970-01-01
      相关资源
      最近更新 更多