Skip to content

Commit 232aea9

Browse files
committed
🐛 w/ tests
1 parent 2a6fe42 commit 232aea9

File tree

5 files changed

+1869
-36
lines changed

5 files changed

+1869
-36
lines changed

TODO

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
TESTS
2+
- == => ===
3+
- Category header
4+
15
NAMING
26
- keys(), keyList()
37
- push(), push$(), pushTo$()

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "extra-array",
3-
"version": "3.0.3",
3+
"version": "3.0.4",
44
"description": "An array is a collection of values, stored contiguously.",
55
"private": false,
66
"main": "index.js",

src/index.ts

+33-33
Original file line numberDiff line numberDiff line change
@@ -298,11 +298,11 @@ export function isEqual<T, U=T>(x: T[], y: T[], fc: CompareFunction<T|U> | null=
298298
* Get zero-based index for element in array.
299299
* @param x an array
300300
* @param i index (-ve: from right)
301-
* @returns i' | x[i'] = x[i]; i' ∈ [0, |x|)
301+
* @returns i' | x[i'] = x[i]; i' ∈ [0, |x|]
302302
*/
303303
export function index<T>(x: T[], i: number): number {
304304
var X = x.length;
305-
return i>=0? Math.min(i, X-1) : Math.max(X+i, 0);
305+
return i>=0? Math.min(i, X) : Math.max(X+i, 0);
306306
}
307307

308308

@@ -311,12 +311,12 @@ export function index<T>(x: T[], i: number): number {
311311
* @param x an array
312312
* @param i start index (-ve: from right) [0]
313313
* @param I end index (-ve: from right) [|x|]
314-
* @returns [i', I'] | i' ≤ I'; i', I' ∈ [0, |x|)
314+
* @returns [i', I'] | i' ≤ I'; i', I' ∈ [0, |x|]
315315
*/
316316
export function indexRange<T>(x: T[], i: number=0, I: number=x.length): [number, number] {
317317
var X = x.length;
318-
var i = i>=0? Math.min(i, X-1) : Math.max(X+i, 0);
319-
var I = I>=0? Math.min(I, X-1) : Math.max(X+I, 0);
318+
var i = i>=0? Math.min(i, X) : Math.max(X+i, 0);
319+
var I = I>=0? Math.min(I, X) : Math.max(X+I, 0);
320320
return [i, Math.max(i, I)];
321321
}
322322

@@ -783,7 +783,7 @@ export function dropRight<T>(x: T[], n: number=1): T[] {
783783
* @returns x[T..] | ft(x[i]) = true ∀ i ∈ [0, T-1] & ft(x[T]) = false
784784
*/
785785
export function dropWhile<T>(x: T[], ft: TestFunction<T>): T[] {
786-
return x.slice(scanUntil(x, ft));
786+
return x.slice(scanWhile(x, ft));
787787
}
788788

789789

@@ -794,7 +794,7 @@ export function dropWhile<T>(x: T[], ft: TestFunction<T>): T[] {
794794
* @returns x[0..T-1] | ft(x[i]) = true ∀ i ∈ [T, |x|-1] & ft(x[T-1]) = false
795795
*/
796796
export function dropWhileRight<T>(x: T[], ft: TestFunction<T>): T[] {
797-
return x.slice(0, scanUntilRight(x, ft));
797+
return x.slice(0, scanWhileRight(x, ft));
798798
}
799799

800800

@@ -1518,28 +1518,28 @@ export function reduceRight<T, U=T>(x: T[], fr: ReduceFunction<T, T|U>, acc?: T|
15181518

15191519
/**
15201520
* Keep values which pass a test.
1521-
* @param x an array (updated)
1521+
* @param x an array
15221522
* @param ft test function (v, i, x)
1523-
* @returns x = [v₀, v₁, ...] | ft(vᵢ) = true; vᵢ ∈ x
1523+
* @returns [v₀, v₁, ...] | ft(vᵢ) = true; vᵢ ∈ x
15241524
*/
1525-
export function filter$<T>(x: T[], ft: TestFunction<T>): T[] {
1526-
for (var i=0, j=0, I=x.length; i<I; ++i)
1527-
if (ft(x[i], i, x)) x[j++] = x[i];
1528-
x.length = j;
1529-
return x;
1525+
export function filter<T>(x: T[], ft: TestFunction<T>): T[] {
1526+
return x.filter(ft);
15301527
}
1528+
export {filter as findAll};
15311529

15321530

15331531
/**
15341532
* Keep values which pass a test.
1535-
* @param x an array
1533+
* @param x an array (updated)
15361534
* @param ft test function (v, i, x)
1537-
* @returns [v₀, v₁, ...] | ft(vᵢ) = true; vᵢ ∈ x
1535+
* @returns x = [v₀, v₁, ...] | ft(vᵢ) = true; vᵢ ∈ x
15381536
*/
1539-
export function filter<T>(x: T[], ft: TestFunction<T>): T[] {
1540-
return x.filter(ft);
1537+
export function filter$<T>(x: T[], ft: TestFunction<T>): T[] {
1538+
for (var i=0, j=0, I=x.length; i<I; ++i)
1539+
if (ft(x[i], i, x)) x[j++] = x[i];
1540+
x.length = j;
1541+
return x;
15411542
}
1542-
export {filter as findAll};
15431543

15441544

15451545
/**
@@ -1556,20 +1556,6 @@ export function filterAt<T>(x: T[], is: number[]): T[] {
15561556
}
15571557

15581558

1559-
/**
1560-
* Discard values which pass a test.
1561-
* @param x an array (updated)
1562-
* @param ft test function (v, i, x)
1563-
* @returns x = [v₀, v₁, ...] | ft(vᵢ) = false; vᵢ ∈ x
1564-
*/
1565-
export function reject$<T>(x: T[], ft: TestFunction<T>): T[] {
1566-
for (var i=0, j=0, I=x.length; i<I; ++i)
1567-
if (!ft(x[i], i, x)) x[j++] = x[i];
1568-
x.length = j;
1569-
return x;
1570-
}
1571-
1572-
15731559
/**
15741560
* Discard values which pass a test.
15751561
* @param x an array
@@ -1584,6 +1570,20 @@ export function reject<T>(x: T[], ft: TestFunction<T>): T[] {
15841570
}
15851571

15861572

1573+
/**
1574+
* Discard values which pass a test.
1575+
* @param x an array (updated)
1576+
* @param ft test function (v, i, x)
1577+
* @returns x = [v₀, v₁, ...] | ft(vᵢ) = false; vᵢ ∈ x
1578+
*/
1579+
export function reject$<T>(x: T[], ft: TestFunction<T>): T[] {
1580+
for (var i=0, j=0, I=x.length; i<I; ++i)
1581+
if (!ft(x[i], i, x)) x[j++] = x[i];
1582+
x.length = j;
1583+
return x;
1584+
}
1585+
1586+
15871587
/**
15881588
* Discard values at given indices.
15891589
* @param x an array

0 commit comments

Comments
 (0)