gpt4 book ai didi

javascript - 遍历嵌套对象属性 nunjucks

转载 作者:行者123 更新时间:2023-11-30 15:50:15 27 4
gpt4 key购买 nike

我有一个像这样的嵌套对象

contract: {
packages: [
{
servicePoint: {
productType: {
name: 'Name1'
}
},
packages: [
{
servicePoint: {
productType: {
name: 'Name1'
}
}

},
{
servicePoint: {
productType: {
name: 'Name2'
}
}

}

]
}
]
}

我想遍历嵌套对象并查找所有 productType.name 值(如果存在)。并创建元素

<button type="button">{{ servicePoint.productType.name }}</button>

我可以做这样的事情

{% for servicePoint in contract.packages[0].packages[0].servicePoints %}

但它只会在第二层对象下找到属性。


我找到了一些解决方案

{% if contract.packages.length > 0 %}
{% for item in contract.packages %}
{% if item.servicePoints.length > 0 %}
{% set names = (names.push(item.servicePoints[0].productType.name), names) %}
{% endif %}
{% if item.packages.length > 0 %}
{% for value in item.packages %}
{% set names = (names.push(value.servicePoints[0].productType.name), names) %}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}

但是我遇到了新问题。如果找到相同的 productType.name,它会创建两个具有相同值的按钮。

我怎么能 uniq productType.name ?

最佳答案

你可以在推送前检查名称是否已经存在于names中。

附言我不确定传递给模板的“不平衡”结构是个好主意。因为 set arr = (arr.push(item), arr) 是一个技巧。

{% if contract.packages.length > 0 %} // You can don't check length. It's not a necessary.

{% for item in contract.packages %}
{% if item.servicePoints.length > 0 %}
{% set names = (names.push(item.servicePoints[0].productType.name), names) %}
{% endif %}

{% if item.packages.length > 0 %}
{% for value in item.packages %}
{% if names.indexOf(value.servicePoints[0].productType.name) == -1 %} // <=
{% set names = (names.push(value.servicePoints[0].productType.name), names) %}
{% endif %} // <=
{% endfor %}
{% endif %}

{% endfor %}

{% endif %}

关于javascript - 遍历嵌套对象属性 nunjucks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39464376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com