如何嵌套 Jsonnet 对象理解并运行内部循环不同的次数?

问题描述 投票:0回答:1

我试图弄清楚如何嵌套/链接对象理解来执行“完整产品”之外的其他操作,并让内部循环迭代不同的数量,但无法弄清楚。

{
    ["%s-thing-%i" % [grp.name, n]]: {
        name: grp.name,
        // a bunch of other stuff I don't want to repeat
    }
    // for n in std.range(1, grp.count)  // invalid, 'Unknown variable: grp'
    for n in std.range(1, 3)
    for grp
    in [{name: "foo", count: 2}, {name: "bar", count: 4}]
}

我想要一个具有两个

foo-thing-
和四个
bar-thing-
的一级对象,但我无法像我的注释行上那样使用
count
对象属性,因为此时
grp
尚未定义。

jsonnet
1个回答
0
投票

您可以首先对输入到对象理解中的数组进行扩展。使用

std.flatMap
stdlib 函数生成具有唯一
n
的对象:

{
    ["%s-thing-%i" % [grp.name, grp.n]]: {
        name: grp.name,
    }
    for grp
    in std.flatMap(
        function(x) [
            x + {n: n}  // adding here so the full object is available
            for n
            in std.range(1, x.count)
        ],
        [{name: "foo", count: 2}, {name: "bar", count: 4}]
    )
}

输出:

{
   "bar-thing-1": {
      "name": "bar"
   },
   "bar-thing-2": {
      "name": "bar"
   },
   "bar-thing-3": {
      "name": "bar"
   },
   "bar-thing-4": {
      "name": "bar"
   },
   "foo-thing-1": {
      "name": "foo"
   },
   "foo-thing-2": {
      "name": "foo"
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.