【问题标题】:jsonnet - remove null values from arrayjsonnet - 从数组中删除空值
【发布时间】:2018-12-19 16:27:39
【问题描述】:

我想从数组中删除空值和重复值,重复值被删除,空值不是

模板:

local sub = [ "", "one", "two", "two", ""];
{
 env: std.prune(std.uniq(std.sort(sub)))
}

输出:

{
  "env": [
    "",
    "one",
    "two"
  ]
}

std.prune 应该删除 empty, null 但它没有发生,我做错了什么吗?还是有其他方法可以删除空值?

【问题讨论】:

    标签: jsonnet


    【解决方案1】:

    根据https://jsonnet.org/ref/stdlib.html#prune

    “空”定义为零长度arrays,零长度objects,或 null 值。

    "" 不考虑修剪,然后您可以使用推导作为 (注意使用std.set(),因为它的字面意思是uniq(sort())):

    local sub = [ "", "one", "two", "two", ""];
    {
       env: [x for x in std.set(sub) if x!= ""]
    }
    

    std.length(x) > 0 表示该条件。

    【讨论】:

      【解决方案2】:

      您可以使用 std.filter(func,arr) 仅保留非空条目。

      std.filter(func, arr)

      返回一个新数组,其中包含 func >function 返回 true 的所有 arr 元素。

      如果参数不是"",您可以将std.filter 的第一个参数指定为接受单个参数并返回true 的函数。第二个参数是你的数组。

      local nonEmpty(x)= x != "";
      local sub = [ "", "one", "two", "two", ""];
      {
         env: std.uniq(std.filter(nonEmpty,sub))
      }
      

      你也可以内联定义:

      local sub = [ "", "one", "two", "two", ""];
      {
         env: std.uniq(std.filter(function(x) x != "",sub))
      }
      

      这会从数组中删除空值并产生:

      > bin/jsonnet fuu.jsonnet 
      {
         "env": [
            "one",
            "two"
         ]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-16
        • 2016-05-23
        • 2019-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多