starting index. defaults to 0
ending index. defaults to undefined
if length
is not provided. else end = length
(before offsetting)
length of the array in question. required if you want a numeric value of end
that is undefined
. defaults to undefined
Optional
offset: numberin the very end of evauation, add an addition offset to start
and end
indexes
a 3-tuple array of resolved [start
index, end
index, and length
of range (ie end - start
)]
import { assertEquals } from "jsr:@std/assert"
const
my_array = [0, 1, 2, 3, 4, 5, 6],
[start, end, new_length] = resolveRange(1, -2, my_array.length)
assertEquals([start, end, new_length], [1, 5, 4])
assertEquals(my_array.slice(start, end), [1, 2, 3, 4])
// expected resolved ranges when a length (3rd argument) is given.
assertEquals(resolveRange(2, undefined, 10), [2, 10, 8])
assertEquals(resolveRange(2, 10, 10), [2, 10, 8])
assertEquals(resolveRange(2, -1, 10), [2, 9, 7])
assertEquals(resolveRange(2, -2, 10), [2, 8, 6])
assertEquals(resolveRange(undefined, -2, 10), [0, 8, 8])
assertEquals(resolveRange(-3, undefined, 10), [7, 10, 3])
assertEquals(resolveRange(-3, -1, 10), [7, 9, 2])
// if no length argument is provided, then no expectation for output length will be given.
assertEquals(resolveRange(2, 10), [2, 10, undefined])
assertEquals(resolveRange(2), [2, undefined, undefined])
// if no length argument is provided, negative indexes will not be resolved.
assertEquals(resolveRange(-2, 10), [-2, 10, undefined])
assertEquals(resolveRange(2, -2), [2, -2, undefined])
assertEquals(resolveRange(-2, -2), [-2, -2, undefined])
// you can additionally offset you final resolved output `start` and `end` indexes using the optional 4th `offset` argument.
assertEquals(resolveRange(2, undefined, 10, 100), [102, 110, 8])
assertEquals(resolveRange(2, 10, 10, 100), [102, 110, 8])
assertEquals(resolveRange(2, -1, 10, 100), [102, 109, 7])
assertEquals(resolveRange(2, -2, 10, 100), [102, 108, 6])
assertEquals(resolveRange(undefined, -2, 10, 100), [100, 108, 8])
assertEquals(resolveRange(-3, undefined, 10, 100), [107, 110, 3])
assertEquals(resolveRange(-3, -1, 10, 100), [107, 109, 2])
// expected resolved output when a length is not provided, but an offset is provided.
assertEquals(resolveRange(2, 10, undefined, 100), [102, 110, undefined])
assertEquals(resolveRange(2, undefined, undefined, 100), [102, undefined, undefined])
// notice the `98`s below when negative indexes are used.
// these might not be what one would expect, so always make sure to provide a length if a potential negative index might be used.
assertEquals(resolveRange(-2, 10, undefined, 100), [98, 110, undefined])
assertEquals(resolveRange(2, -2, undefined, 100), [102, 98, undefined])
assertEquals(resolveRange(-2, -2, undefined, 100), [98, 98, undefined])
resolve the positive (normalized) starting and ending indexes of a range.
for both start
and end
, a negative index can be used to indicate an index from the end of the range, if a length
is given.
for example, -2
refers to the second to last index (ie length - 2
).
you must provide the length of your array if you wish to use negative indexes. furthermore, you will only receive the length property if you had initially provided the length of the array.
Optional
start: numberstarting index. defaults to 0
Optional
end: numberending index. defaults to undefined
if length
is not provided. else end = length
(before offsetting)
Optional
length: undefinedlength of the array in question. required if you want a numeric value of end
that is undefined
. defaults to undefined
Optional
offset: numberin the very end of evauation, add an addition offset to start
and end
indexes
a 3-tuple array of resolved [start
index, end
index, and length
of range (ie end - start
)]
import { assertEquals } from "jsr:@std/assert"
const
my_array = [0, 1, 2, 3, 4, 5, 6],
[start, end, new_length] = resolveRange(1, -2, my_array.length)
assertEquals([start, end, new_length], [1, 5, 4])
assertEquals(my_array.slice(start, end), [1, 2, 3, 4])
// expected resolved ranges when a length (3rd argument) is given.
assertEquals(resolveRange(2, undefined, 10), [2, 10, 8])
assertEquals(resolveRange(2, 10, 10), [2, 10, 8])
assertEquals(resolveRange(2, -1, 10), [2, 9, 7])
assertEquals(resolveRange(2, -2, 10), [2, 8, 6])
assertEquals(resolveRange(undefined, -2, 10), [0, 8, 8])
assertEquals(resolveRange(-3, undefined, 10), [7, 10, 3])
assertEquals(resolveRange(-3, -1, 10), [7, 9, 2])
// if no length argument is provided, then no expectation for output length will be given.
assertEquals(resolveRange(2, 10), [2, 10, undefined])
assertEquals(resolveRange(2), [2, undefined, undefined])
// if no length argument is provided, negative indexes will not be resolved.
assertEquals(resolveRange(-2, 10), [-2, 10, undefined])
assertEquals(resolveRange(2, -2), [2, -2, undefined])
assertEquals(resolveRange(-2, -2), [-2, -2, undefined])
// you can additionally offset you final resolved output `start` and `end` indexes using the optional 4th `offset` argument.
assertEquals(resolveRange(2, undefined, 10, 100), [102, 110, 8])
assertEquals(resolveRange(2, 10, 10, 100), [102, 110, 8])
assertEquals(resolveRange(2, -1, 10, 100), [102, 109, 7])
assertEquals(resolveRange(2, -2, 10, 100), [102, 108, 6])
assertEquals(resolveRange(undefined, -2, 10, 100), [100, 108, 8])
assertEquals(resolveRange(-3, undefined, 10, 100), [107, 110, 3])
assertEquals(resolveRange(-3, -1, 10, 100), [107, 109, 2])
// expected resolved output when a length is not provided, but an offset is provided.
assertEquals(resolveRange(2, 10, undefined, 100), [102, 110, undefined])
assertEquals(resolveRange(2, undefined, undefined, 100), [102, undefined, undefined])
// notice the `98`s below when negative indexes are used.
// these might not be what one would expect, so always make sure to provide a length if a potential negative index might be used.
assertEquals(resolveRange(-2, 10, undefined, 100), [98, 110, undefined])
assertEquals(resolveRange(2, -2, undefined, 100), [102, 98, undefined])
assertEquals(resolveRange(-2, -2, undefined, 100), [98, 98, undefined])
resolve the positive (normalized) starting and ending indexes of a range.
for both
start
andend
, a negative index can be used to indicate an index from the end of the range, if alength
is given. for example,-2
refers to the second to last index (ielength - 2
).you must provide the length of your array if you wish to use negative indexes. furthermore, you will only receive the length property if you had initially provided the length of the array.