diff --git a/doc/_stdlib_gen/stdlib-content.jsonnet b/doc/_stdlib_gen/stdlib-content.jsonnet index e9554a88c..ada55c5ca 100644 --- a/doc/_stdlib_gen/stdlib-content.jsonnet +++ b/doc/_stdlib_gen/stdlib-content.jsonnet @@ -1270,6 +1270,20 @@ local html = import 'html.libsonnet'; }, ], }, + { + name: 'flattenDeepArray', + params: ['value'], + availableSince: 'upcoming', + description: ||| + Concatenate an array containing values and arrays into a single flattened array. + |||, + examples: [ + { + input: 'std.flattenDeepArray([[1, 2], [], [3, [4]], [[5, 6, [null]], [7, 8]]])', + output: std.flattenDeepArray([[1, 2], [], [3, [4]], [[5, 6, [null]], [7, 8]]]), + }, + ], + }, { name: 'reverse', params: ['arrs'], diff --git a/stdlib/std.jsonnet b/stdlib/std.jsonnet index 0349fb5df..393fd3321 100644 --- a/stdlib/std.jsonnet +++ b/stdlib/std.jsonnet @@ -865,6 +865,12 @@ limitations under the License. flattenArrays(arrs):: std.foldl(function(a, b) a + b, arrs, []), + flattenDeepArray(value):: + if std.isArray(value) then + [y for x in value for y in std.flattenDeepArray(x)] + else + [value], + manifestIni(ini):: local body_lines(body) = std.join([], [ diff --git a/test_suite/stdlib.jsonnet b/test_suite/stdlib.jsonnet index d69c763da..78f95b717 100644 --- a/test_suite/stdlib.jsonnet +++ b/test_suite/stdlib.jsonnet @@ -313,6 +313,11 @@ std.assertEqual(std.lines(['a', null, 'b']), 'a\nb\n') && std.assertEqual(std.flattenArrays([[1, 2, 3], [4, 5, 6], []]), [1, 2, 3, 4, 5, 6]) && +std.assertEqual(std.flattenDeepArray([]), []) && +std.assertEqual(std.flattenDeepArray([1, 2, 3]), [1, 2, 3]) && +std.assertEqual(std.flattenDeepArray([1, [2, 3]]), [1, 2, 3]) && +std.assertEqual(std.flattenDeepArray([[1], [2, 3], [[null]]]), [1, 2, 3, null]) && + std.assertEqual( std.manifestIni({ main: { a: '1', b: '2' },