问题描述
我的数组数据:
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);