Skip to content

Commit 3dc36cb

Browse files
array: Add chunkArray
Splits an array into the given maxSize chunks
1 parent 4eee017 commit 3dc36cb

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

array.libsonnet

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,18 @@ local d = import 'github.com/jsonnet-libs/docsonnet/doc-util/main.libsonnet';
5252
for i in std.range(0, std.length(arr) - 1)
5353
if filter_func(i, arr[i])
5454
],
55+
56+
'#chunkArray':: d.fn(
57+
|||
58+
`chunkArray` chunks an array into smaller arrays of the given max size.
59+
|||,
60+
[
61+
d.arg('arr', d.T.array),
62+
d.arg('maxSize', d.T.number),
63+
]
64+
),
65+
chunkArray(arr, maxSize): [
66+
arr[i * maxSize:std.min((i + 1) * maxSize, std.length(arr))]
67+
for i in std.range(0, std.ceil(std.length(arr) / maxSize) - 1)
68+
],
5569
}

test/array_test.jsonnet

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,32 @@ test.new(std.thisFile)
8181
expected=[0, 2, 4],
8282
)
8383
)
84+
85+
+ test.case.new(
86+
name='chunkArray',
87+
test=test.expect.eq(
88+
actual=array.chunkArray(arr, maxSize=3),
89+
expected=[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]],
90+
)
91+
)
92+
+ test.case.new(
93+
name='chunkArray - maxSize is 2',
94+
test=test.expect.eq(
95+
actual=array.chunkArray(arr, maxSize=2),
96+
expected=[[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]],
97+
)
98+
)
99+
+ test.case.new(
100+
name='chunkArray - maxSize is larger than array length',
101+
test=test.expect.eq(
102+
actual=array.chunkArray(arr, maxSize=100),
103+
expected=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]],
104+
)
105+
)
106+
+ test.case.new(
107+
name='chunkArray - maxSize is 1',
108+
test=test.expect.eq(
109+
actual=array.chunkArray(arr, maxSize=1),
110+
expected=[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10]],
111+
)
112+
)

0 commit comments

Comments
 (0)