Skip to content

Commit 6a0311c

Browse files
array: Add chunkArray (#36)
* array: Add chunkArray Splits an array into the given maxSize chunks * Use a more complex array * make docs
1 parent 4eee017 commit 6a0311c

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-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
}

docs/array.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,21 @@ local array = import "github.com/jsonnet-libs/xtd/array.libsonnet"
1212

1313
## Index
1414

15+
* [`fn chunkArray(arr, maxSize)`](#fn-chunkarray)
1516
* [`fn filterMapWithIndex(filter_func, map_func, arr)`](#fn-filtermapwithindex)
1617
* [`fn slice(indexable, index, end='null', step=1)`](#fn-slice)
1718

1819
## Fields
1920

21+
### fn chunkArray
22+
23+
```ts
24+
chunkArray(arr, maxSize)
25+
```
26+
27+
`chunkArray` chunks an array into smaller arrays of the given max size.
28+
29+
2030
### fn filterMapWithIndex
2131

2232
```ts

test/array_test.jsonnet

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ local array = import '../array.libsonnet';
22
local test = import 'github.com/jsonnet-libs/testonnet/main.libsonnet';
33

44
local arr = std.range(0, 10);
5+
local mixedArr = ['a', 1, 'b', 2, 'c', 3, 4, 5, 6, 7, 8, 9, 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
56

67
test.new(std.thisFile)
78

@@ -81,3 +82,32 @@ test.new(std.thisFile)
8182
expected=[0, 2, 4],
8283
)
8384
)
85+
86+
+ test.case.new(
87+
name='chunkArray',
88+
test=test.expect.eq(
89+
actual=array.chunkArray(mixedArr, maxSize=3),
90+
expected=[['a', 1, 'b'], [2, 'c', 3], [4, 5, 6], [7, 8, 9], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j']],
91+
)
92+
)
93+
+ test.case.new(
94+
name='chunkArray - maxSize is 2',
95+
test=test.expect.eq(
96+
actual=array.chunkArray(mixedArr, maxSize=2),
97+
expected=[['a', 1], ['b', 2], ['c', 3], [4, 5], [6, 7], [8, 9], ['d', 'e'], ['f', 'g'], ['h', 'i'], ['j']],
98+
)
99+
)
100+
+ test.case.new(
101+
name='chunkArray - maxSize is larger than array length',
102+
test=test.expect.eq(
103+
actual=array.chunkArray(mixedArr, maxSize=100),
104+
expected=[mixedArr],
105+
)
106+
)
107+
+ test.case.new(
108+
name='chunkArray - maxSize is 1',
109+
test=test.expect.eq(
110+
actual=array.chunkArray(mixedArr, maxSize=1),
111+
expected=[['a'], [1], ['b'], [2], ['c'], [3], [4], [5], [6], [7], [8], [9], ['d'], ['e'], ['f'], ['g'], ['h'], ['i'], ['j']],
112+
)
113+
)

0 commit comments

Comments
 (0)