【问题标题】:jsonnet std.mapWithKey - not generating an array?jsonnet std.mapWithKey - 不生成数组?
【发布时间】:2020-09-16 07:57:10
【问题描述】:

我有一个这样定义的本地 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 函数,它可以只返回所有字段的值,作为一个数组 - 即我感兴趣的数组。

【问题讨论】:

    标签: jsonnet


    【解决方案1】:

    这是你需要的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2015-12-21
      相关资源
      最近更新 更多