Nunjucks迭代数组中的项目以显示对象中的项目

时间:2021-05-08 14:30:49

In javascript I can loop over an array to output my object as shown below.

在javascript中我可以循环一个数组来输出我的对象,如下所示。

var myArr = ["one","two","three"]
var myObj = {
  "one": {
    "title": "ones",
    "desc": "this is one"
  },
  "three": {
    "title": "threes",
    "desc": "this is three"
  },
  "two": {
    "title": "twos",
    "desc": "this is two"
  }
}

myArr.forEach(function (value) {
  console.log(myObj[value].title, myObj[value].desc);
});

outputs

输出

ones this is one

这是一个

twos this is two

这是两个

threes this is three

三分,这是三

console.log("number 2 - ",myObj[myArr[1]].desc)
console.log("number 2 - ",myObj["two"].desc)

outputs

输出

number 2 - this is two

2号 - 这是两个

number 2 - this is two

2号 - 这是两个

I want to be able to do this in nunjucks as I want to control the order of display from myArr but also want the flexibility to be able to have a single page eg one.html where I can target one specifically eg {{testObj.one.title}}.

我希望能够在nunjucks中执行此操作,因为我想控制myArr的显示顺序,但也希望能够灵活地拥有单个页面,例如one.html,我可以专门针对一个页面,例如{{testObj.one 。标题}}。

How can this be acheived with nunjucks? I have tried the below.

如何通过nunjucks实现这一目标?我试过以下。

-- nunjucks --
<ul>
  {% for item in testArr %}
    <li>{{item}} - {{testObj.one.title}}</li>
  {% endfor %}
</ul>

<ul>
   {% for obj, item in testObj %}
      <li>{{ obj }}: {{ item | dump }} - {{ item.title }} - {{ item.desc }}</li>
   {% endfor %}
</ul>

--- output ---
<ul>
  <li>one - ones</li>
  <li>two - ones</li>
  <li>three - ones</li>
</ul>

<ul>
  <li>one: {"title":"ones","desc":"this is one"} - ones - this is one</li>
  <li>three: {"title":"threes","desc":"this is three"} - threes - this is three</li>
  <li>two: {"title":"twos","desc":"this is two"} - twos - this is two</li>
</ul>

My ideal output to get to would be like the below where I can order my display based on myArr but for each item show the contents of their key in myObj

我理想的输出就像下面我可以根据myArr订购我的显示器但是每个项目都显示myObj中其键的内容

<ul>
  <li>one - ones</li>
  <li>two - twos</li>
  <li>three - threes</li>
</ul>

1 个解决方案

#1


2  

<ul>
  {% for item in myArr %}
    <li>{{item}} - {{myObj[item].title}}</li>
  {% endfor %}
</ul>

?

#1


2  

<ul>
  {% for item in myArr %}
    <li>{{item}} - {{myObj[item].title}}</li>
  {% endfor %}
</ul>

?