Compare commits
3 Commits
f933ce28b9
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
babb1e0247
|
|||
|
98bd6b573e
|
|||
|
78ae570bcb
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@infendro/collection",
|
"name": "@infendro/collection",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc"
|
"build": "tsc"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ import {count} from "./collection/count";
|
|||||||
import {distinct} from "./collection/distinct";
|
import {distinct} from "./collection/distinct";
|
||||||
import {distinctBy} from "./collection/distinctBy";
|
import {distinctBy} from "./collection/distinctBy";
|
||||||
import {drop} from "./collection/drop";
|
import {drop} from "./collection/drop";
|
||||||
|
import {dropLast} from "./collection/dropLast";
|
||||||
|
import {dropLastUntil} from "./collection/dropLastUntil";
|
||||||
|
import {dropLastWhile} from "./collection/dropLastWhile";
|
||||||
import {dropUntil} from "./collection/dropUntil";
|
import {dropUntil} from "./collection/dropUntil";
|
||||||
import {dropWhile} from "./collection/dropWhile";
|
import {dropWhile} from "./collection/dropWhile";
|
||||||
import {filter} from "./collection/filter";
|
import {filter} from "./collection/filter";
|
||||||
@@ -69,24 +72,27 @@ import {sortedWith} from "./collection/sortedWith";
|
|||||||
import {sum} from "./collection/sum";
|
import {sum} from "./collection/sum";
|
||||||
import {sumBy} from "./collection/sumBy";
|
import {sumBy} from "./collection/sumBy";
|
||||||
import {take} from "./collection/take";
|
import {take} from "./collection/take";
|
||||||
|
import {takeLast} from "./collection/takeLast";
|
||||||
|
import {takeLastUntil} from "./collection/takeLastUntil";
|
||||||
|
import {takeLastWhile} from "./collection/takeLastWhile";
|
||||||
import {takeUntil} from "./collection/takeUntil";
|
import {takeUntil} from "./collection/takeUntil";
|
||||||
import {takeWhile} from "./collection/takeWhile";
|
import {takeWhile} from "./collection/takeWhile";
|
||||||
import {toArray} from "./collection/toArray";
|
import {toArray} from "./collection/toArray";
|
||||||
import {toMap} from "./collection/toMap";
|
import {toMap} from "./collection/toMap";
|
||||||
|
import {Key, Object, toObject} from "./collection/toObject";
|
||||||
import {toSet} from "./collection/toSet";
|
import {toSet} from "./collection/toSet";
|
||||||
import {unzip} from "./collection/unzip";
|
import {unzip} from "./collection/unzip";
|
||||||
import {windowed} from "./collection/windowed";
|
import {windowed} from "./collection/windowed";
|
||||||
import {withIndex} from "./collection/withIndex";
|
import {withIndex} from "./collection/withIndex";
|
||||||
import {zip} from "./collection/zip";
|
import {zip} from "./collection/zip";
|
||||||
import {Key, Object, toObject} from "./collection/toObject";
|
|
||||||
|
|
||||||
export type Collection<T> = {
|
export type Collection<T> = {
|
||||||
[Symbol.iterator](): Iterator<T>
|
[Symbol.iterator](): Iterator<T>
|
||||||
|
|
||||||
toObject<K extends Key, V>(this: Collection<[K, V]>): Object<K, V | undefined>
|
|
||||||
toArray(): T[]
|
toArray(): T[]
|
||||||
toSet(): Set<T>
|
toSet(): Set<T>
|
||||||
toMap<K, V>(this: Collection<[K, V]>): Map<K, V>
|
toMap<K, V>(this: Collection<[K, V]>): Map<K, V>
|
||||||
|
toObject<K extends Key, V>(this: Collection<[K, V]>): Object<K, V>
|
||||||
|
|
||||||
onEach(action: (it: T) => void): Collection<T>
|
onEach(action: (it: T) => void): Collection<T>
|
||||||
forEach(action: (it: T) => void): void
|
forEach(action: (it: T) => void): void
|
||||||
@@ -157,9 +163,15 @@ export type Collection<T> = {
|
|||||||
drop(count: number): Collection<T>
|
drop(count: number): Collection<T>
|
||||||
dropWhile(predicate: (it: T) => boolean): Collection<T>
|
dropWhile(predicate: (it: T) => boolean): Collection<T>
|
||||||
dropUntil(predicate: (it: T) => boolean): Collection<T>
|
dropUntil(predicate: (it: T) => boolean): Collection<T>
|
||||||
|
dropLast(count: number): Collection<T>
|
||||||
|
dropLastWhile(predicate: (it: T) => boolean): Collection<T>
|
||||||
|
dropLastUntil(predicate: (it: T) => boolean): Collection<T>
|
||||||
take(count: number): Collection<T>
|
take(count: number): Collection<T>
|
||||||
takeWhile(predicate: (it: T) => boolean): Collection<T>
|
takeWhile(predicate: (it: T) => boolean): Collection<T>
|
||||||
takeUntil(predicate: (it: T) => boolean): Collection<T>
|
takeUntil(predicate: (it: T) => boolean): Collection<T>
|
||||||
|
takeLast(count: number): Collection<T>
|
||||||
|
takeLastWhile(predicate: (it: T) => boolean): Collection<T>
|
||||||
|
takeLastUntil(predicate: (it: T) => boolean): Collection<T>
|
||||||
slice(start: number, end?: number): Collection<T>
|
slice(start: number, end?: number): Collection<T>
|
||||||
|
|
||||||
map<R>(transform: (it: T) => R): Collection<R>
|
map<R>(transform: (it: T) => R): Collection<R>
|
||||||
@@ -192,9 +204,6 @@ function wrap<T>(value: T[]): Collection<T> {
|
|||||||
[Symbol.iterator]() {
|
[Symbol.iterator]() {
|
||||||
return value[Symbol.iterator]();
|
return value[Symbol.iterator]();
|
||||||
},
|
},
|
||||||
toObject<K extends Key, V>() {
|
|
||||||
return toObject(value as [K, V][]);
|
|
||||||
},
|
|
||||||
toArray() {
|
toArray() {
|
||||||
return toArray(value);
|
return toArray(value);
|
||||||
},
|
},
|
||||||
@@ -204,6 +213,9 @@ function wrap<T>(value: T[]): Collection<T> {
|
|||||||
toMap<K, V>() {
|
toMap<K, V>() {
|
||||||
return toMap(value as [K, V][]);
|
return toMap(value as [K, V][]);
|
||||||
},
|
},
|
||||||
|
toObject<K extends Key, V>() {
|
||||||
|
return toObject(value as [K, V][]);
|
||||||
|
},
|
||||||
onEach(action) {
|
onEach(action) {
|
||||||
return wrap(onEach(value, action));
|
return wrap(onEach(value, action));
|
||||||
},
|
},
|
||||||
@@ -375,6 +387,15 @@ function wrap<T>(value: T[]): Collection<T> {
|
|||||||
dropUntil(predicate) {
|
dropUntil(predicate) {
|
||||||
return wrap(dropUntil(value, predicate));
|
return wrap(dropUntil(value, predicate));
|
||||||
},
|
},
|
||||||
|
dropLast(count) {
|
||||||
|
return wrap(dropLast(value, count));
|
||||||
|
},
|
||||||
|
dropLastWhile(predicate) {
|
||||||
|
return wrap(dropLastWhile(value, predicate));
|
||||||
|
},
|
||||||
|
dropLastUntil(predicate) {
|
||||||
|
return wrap(dropLastUntil(value, predicate));
|
||||||
|
},
|
||||||
take(count) {
|
take(count) {
|
||||||
return wrap(take(value, count));
|
return wrap(take(value, count));
|
||||||
},
|
},
|
||||||
@@ -384,6 +405,15 @@ function wrap<T>(value: T[]): Collection<T> {
|
|||||||
takeUntil(predicate) {
|
takeUntil(predicate) {
|
||||||
return wrap(takeUntil(value, predicate));
|
return wrap(takeUntil(value, predicate));
|
||||||
},
|
},
|
||||||
|
takeLast(count) {
|
||||||
|
return wrap(takeLast(value, count));
|
||||||
|
},
|
||||||
|
takeLastWhile(predicate) {
|
||||||
|
return wrap(takeLastWhile(value, predicate));
|
||||||
|
},
|
||||||
|
takeLastUntil(predicate) {
|
||||||
|
return wrap(takeLastUntil(value, predicate));
|
||||||
|
},
|
||||||
slice(start, end) {
|
slice(start, end) {
|
||||||
return wrap(slice(value, start, end));
|
return wrap(slice(value, start, end));
|
||||||
},
|
},
|
||||||
|
|||||||
10
src/collection/dropLast.ts
Normal file
10
src/collection/dropLast.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import {error} from "../util/error";
|
||||||
|
|
||||||
|
export function dropLast<T>(value: T[], count: number): T[] {
|
||||||
|
if (count < 0) error();
|
||||||
|
const result: T[] = [];
|
||||||
|
for (let i = 0; i < (value.length - count); i++) {
|
||||||
|
result.push(value[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
11
src/collection/dropLastUntil.ts
Normal file
11
src/collection/dropLastUntil.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
export function dropLastUntil<T>(value: T[], predicate: (it: T) => boolean): T[] {
|
||||||
|
let index = value.length - 1;
|
||||||
|
while (index >= 0 && !predicate(value[index])) {
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
const result: T[] = [];
|
||||||
|
for (let i = 0; i <= index; i++) {
|
||||||
|
result.push(value[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
11
src/collection/dropLastWhile.ts
Normal file
11
src/collection/dropLastWhile.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
export function dropLastWhile<T>(value: T[], predicate: (it: T) => boolean): T[] {
|
||||||
|
let index = value.length - 1;
|
||||||
|
while (index >= 0 && predicate(value[index])) {
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
const result: T[] = [];
|
||||||
|
for (let i = 0; i <= index; i++) {
|
||||||
|
result.push(value[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -3,8 +3,8 @@ import {error} from "../util/error";
|
|||||||
export function max(value: number[]): number {
|
export function max(value: number[]): number {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let max = value[0];
|
let max = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (it > max) max = it;
|
if (it > max) max = it;
|
||||||
}
|
}
|
||||||
return max;
|
return max;
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ export function maxBy<T>(value: T[], transform: (it: T) => number): T {
|
|||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let maxIt = value[0];
|
let maxIt = value[0];
|
||||||
let maxVal = transform(maxIt);
|
let maxVal = transform(maxIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val > maxVal) {
|
if (val > maxVal) {
|
||||||
maxIt = it;
|
maxIt = it;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ export function maxByOrNull<T>(value: T[], transform: (it: T) => number): T | nu
|
|||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let maxIt = value[0];
|
let maxIt = value[0];
|
||||||
let maxVal = transform(maxIt);
|
let maxVal = transform(maxIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val > maxVal) {
|
if (val > maxVal) {
|
||||||
maxIt = it;
|
maxIt = it;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import {error} from "../util/error";
|
|||||||
export function maxOf<T>(value: T[], transform: (it: T) => number): number {
|
export function maxOf<T>(value: T[], transform: (it: T) => number): number {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let max = transform(value[0]);
|
let max = transform(value[0]);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val > max) max = val;
|
if (val > max) max = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
export function maxOfOrNull<T>(value: T[], transform: (it: T) => number): number | null {
|
export function maxOfOrNull<T>(value: T[], transform: (it: T) => number): number | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let max = transform(value[0]);
|
let max = transform(value[0]);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val > max) max = val;
|
if (val > max) max = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
export function maxOrNull(value: number[]): number | null {
|
export function maxOrNull(value: number[]): number | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let max = value[0];
|
let max = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (it > max) max = it;
|
if (it > max) max = it;
|
||||||
}
|
}
|
||||||
return max;
|
return max;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import {error} from "../util/error";
|
|||||||
export function maxWith<T>(value: T[], compare: (a: T, b: T) => number): T {
|
export function maxWith<T>(value: T[], compare: (a: T, b: T) => number): T {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let max = value[0];
|
let max = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (compare(it, max) > 0) max = it;
|
if (compare(it, max) > 0) max = it;
|
||||||
}
|
}
|
||||||
return max;
|
return max;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
export function maxWithOrNull<T>(value: T[], compare: (a: T, b: T) => number): T | null {
|
export function maxWithOrNull<T>(value: T[], compare: (a: T, b: T) => number): T | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let max = value[0];
|
let max = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (compare(it, max) > 0) max = it;
|
if (compare(it, max) > 0) max = it;
|
||||||
}
|
}
|
||||||
return max;
|
return max;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import {error} from "../util/error";
|
|||||||
export function min(value: number[]): number {
|
export function min(value: number[]): number {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let min = value[0];
|
let min = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (it < min) min = it;
|
if (it < min) min = it;
|
||||||
}
|
}
|
||||||
return min;
|
return min;
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ export function minBy<T>(value: T[], transform: (it: T) => number): T {
|
|||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let minIt = value[0];
|
let minIt = value[0];
|
||||||
let minVal = transform(minIt);
|
let minVal = transform(minIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val < minVal) {
|
if (val < minVal) {
|
||||||
minIt = it;
|
minIt = it;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ export function minByOrNull<T>(value: T[], transform: (it: T) => number): T | nu
|
|||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let minIt = value[0];
|
let minIt = value[0];
|
||||||
let minVal = transform(minIt);
|
let minVal = transform(minIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val < minVal) {
|
if (val < minVal) {
|
||||||
minIt = it;
|
minIt = it;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import {error} from "../util/error";
|
|||||||
export function minOf<T>(value: T[], transform: (it: T) => number): number {
|
export function minOf<T>(value: T[], transform: (it: T) => number): number {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let min = transform(value[0]);
|
let min = transform(value[0]);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val < min) min = val;
|
if (val < min) min = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
export function minOfOrNull<T>(value: T[], transform: (it: T) => number): number | null {
|
export function minOfOrNull<T>(value: T[], transform: (it: T) => number): number | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let min = transform(value[0]);
|
let min = transform(value[0]);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val < min) min = val;
|
if (val < min) min = val;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
export function minOrNull(value: number[]): number | null {
|
export function minOrNull(value: number[]): number | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let min = value[0];
|
let min = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (it < min) min = it;
|
if (it < min) min = it;
|
||||||
}
|
}
|
||||||
return min;
|
return min;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import {error} from "../util/error";
|
|||||||
export function minWith<T>(value: T[], compare: (a: T, b: T) => number): T {
|
export function minWith<T>(value: T[], compare: (a: T, b: T) => number): T {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let min = value[0];
|
let min = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (compare(it, min) < 0) min = it;
|
if (compare(it, min) < 0) min = it;
|
||||||
}
|
}
|
||||||
return min;
|
return min;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
export function minWithOrNull<T>(value: T[], compare: (a: T, b: T) => number): T | null {
|
export function minWithOrNull<T>(value: T[], compare: (a: T, b: T) => number): T | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let min = value[0];
|
let min = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
const it = value[index];
|
const it = value[i];
|
||||||
if (compare(it, min) < 0) min = it;
|
if (compare(it, min) < 0) min = it;
|
||||||
}
|
}
|
||||||
return min;
|
return min;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import {error} from "../util/error";
|
|||||||
export function reduce<T>(value: T[], accumulate: (acc: T, it: T) => T): T {
|
export function reduce<T>(value: T[], accumulate: (acc: T, it: T) => T): T {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let acc = value[0];
|
let acc = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
acc = accumulate(acc, value[index]);
|
acc = accumulate(acc, value[i]);
|
||||||
}
|
}
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
export function reduceOrNull<T>(value: T[], accumulate: (acc: T, it: T) => T): T | null {
|
export function reduceOrNull<T>(value: T[], accumulate: (acc: T, it: T) => T): T | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let acc = value[0];
|
let acc = value[0];
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let i = 1; i < value.length; i++) {
|
||||||
acc = accumulate(acc, value[index]);
|
acc = accumulate(acc, value[i]);
|
||||||
}
|
}
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,8 @@ export function slice<T>(value: T[], start: number, end?: number): T[] {
|
|||||||
if (start > end) error();
|
if (start > end) error();
|
||||||
}
|
}
|
||||||
const result: T[] = [];
|
const result: T[] = [];
|
||||||
const limit = end ?? value.length;
|
for (let i = start; i < (end ?? value.length); i++) {
|
||||||
for (let index = start; index < limit; index++) {
|
result.push(value[i]);
|
||||||
result.push(value[index]);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ import {error} from "../util/error";
|
|||||||
export function take<T>(value: T[], count: number): T[] {
|
export function take<T>(value: T[], count: number): T[] {
|
||||||
if (count < 0) error();
|
if (count < 0) error();
|
||||||
const result: T[] = [];
|
const result: T[] = [];
|
||||||
const limit = Math.min(count, value.length);
|
const index = Math.min(count, value.length);
|
||||||
for (let index = 0; index < limit; index++) {
|
for (let i = 0; i < index; i++) {
|
||||||
result.push(value[index]);
|
result.push(value[i]);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
11
src/collection/takeLast.ts
Normal file
11
src/collection/takeLast.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import {error} from "../util/error";
|
||||||
|
|
||||||
|
export function takeLast<T>(value: T[], count: number): T[] {
|
||||||
|
if (count < 0) error();
|
||||||
|
const result: T[] = [];
|
||||||
|
const index = Math.max(0, value.length - count);
|
||||||
|
for (let i = index; i < value.length; i++) {
|
||||||
|
result.push(value[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
11
src/collection/takeLastUntil.ts
Normal file
11
src/collection/takeLastUntil.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
export function takeLastUntil<T>(value: T[], predicate: (it: T) => boolean): T[] {
|
||||||
|
let index = value.length - 1;
|
||||||
|
while (index >= 0 && !predicate(value[index])) {
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
const result: T[] = [];
|
||||||
|
for (let i = index + 1; i < value.length; i++) {
|
||||||
|
result.push(value[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
11
src/collection/takeLastWhile.ts
Normal file
11
src/collection/takeLastWhile.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
export function takeLastWhile<T>(value: T[], predicate: (it: T) => boolean): T[] {
|
||||||
|
let index = value.length - 1;
|
||||||
|
while (index >= 0 && predicate(value[index])) {
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
const result: T[] = [];
|
||||||
|
for (let i = index + 1; i < value.length; i++) {
|
||||||
|
result.push(value[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
export type Key = keyof any
|
export type Key = keyof any
|
||||||
export type Object<K extends Key, V> = { [key in K]: V }
|
export type Object<K extends Key, V> = { [key in K]?: V }
|
||||||
|
|
||||||
export function toObject<K extends Key, V>(value: [K, V][]): Object<K, V | undefined> {
|
export function toObject<K extends Key, V>(value: [K, V][]): Object<K, V> {
|
||||||
return Object.fromEntries(value) as Object<K, V | undefined>;
|
return Object.fromEntries(value) as Object<K, V>;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user