1

我有一个本地 jsonnet 对象定义如下:

local compactRules = {
  key1: "val1",
  key2: "val2",
  key3: "val3"
};

我想生成这个数组:

[
  {
    rule: "key1",
    action: "val1",
  },
  {
    rule: "keyk2",
    action: "val2"
   }
  // ...
]

我很惊讶std.mapWithKey没有交付。文档没有提到任何关于输出格式的内容,我仍然对它的行为感到困惑:

std.mapWithKey(function(key_name, value) {
  rule: key_name,
  action: value
}, compactRules)

产量:

{
   "key1": {
      "action": "val1",
      "rule": "key1"
   },
   "key2": {
      "action": "val2",
      "rule": "key2"
   },
   "key3": {
      "action": "val3",
      "rule": "key3"
   }
}

如果我已经在函数中处理了自己的键,为什么它会使用结果对象中的原始键?

我不会这么不满意,除非有一个std.objectValues函数,它可以只返回所有字段的值,作为一个数组 - 即我感兴趣的数组。

4

1 回答 1

2

这就是你需要的:

std.map(function(key_name) {
  rule: key_name,
  action: compactRules[key_name],
}, std.objectFields(compactRules))

尽管似乎其他人已经注意到https://github.com/google/jsonnet/issues/543中缺少此功能。

于 2020-09-16T08:08:49.940 回答