jsonnet-从数组中删除空值

时间:2018-12-19 16:27:39

标签: jsonnet

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

模板:

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

输出:

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

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

2 个答案:

答案 0 :(得分: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(针对该条件)。

答案 1 :(得分:1)

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

<块引用>

std.filter(func, arr)

返回一个新数组,该数组包含 func > 函数返回 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"
   ]
}