我试图弄清楚如何嵌套/链接对象理解来执行“完整产品”之外的其他操作,并让内部循环迭代不同的数量,但无法弄清楚。
{
["%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
尚未定义。
您可以首先对输入到对象理解中的数组进行扩展。使用
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"
}
}