Nunjucks 嵌套对象数组字段打印

问题描述

我的数组数据:

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(".") }}

解决方法

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

实现 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);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...