Compare commits
3 Commits
24838b8f77
...
f933ce28b9
| Author | SHA1 | Date | |
|---|---|---|---|
|
f933ce28b9
|
|||
|
d4875a8ff0
|
|||
|
a1bbf7cd1a
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@infendro/collection",
|
"name": "@infendro/collection",
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc"
|
"build": "tsc"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -78,10 +78,12 @@ 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>
|
||||||
@@ -190,6 +192,9 @@ 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);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ import {error} from "../util/error";
|
|||||||
|
|
||||||
export function maxBy<T>(value: T[], transform: (it: T) => number): T {
|
export function maxBy<T>(value: T[], transform: (it: T) => number): T {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let max = value[0];
|
let maxIt = value[0];
|
||||||
let maxVal = transform(max);
|
let maxVal = transform(maxIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let index = 1; index < value.length; index++) {
|
||||||
const it = value[index];
|
const it = value[index];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val > maxVal) {
|
if (val > maxVal) {
|
||||||
max = it;
|
maxIt = it;
|
||||||
maxVal = val;
|
maxVal = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return max;
|
return maxIt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
export function maxByOrNull<T>(value: T[], transform: (it: T) => number): T | null {
|
export function maxByOrNull<T>(value: T[], transform: (it: T) => number): T | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let max = value[0];
|
let maxIt = value[0];
|
||||||
let maxVal = transform(max);
|
let maxVal = transform(maxIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let index = 1; index < value.length; index++) {
|
||||||
const it = value[index];
|
const it = value[index];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val > maxVal) {
|
if (val > maxVal) {
|
||||||
max = it;
|
maxIt = it;
|
||||||
maxVal = val;
|
maxVal = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return max;
|
return maxIt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ import {error} from "../util/error";
|
|||||||
|
|
||||||
export function minBy<T>(value: T[], transform: (it: T) => number): T {
|
export function minBy<T>(value: T[], transform: (it: T) => number): T {
|
||||||
if (value.length === 0) error();
|
if (value.length === 0) error();
|
||||||
let min = value[0];
|
let minIt = value[0];
|
||||||
let minVal = transform(min);
|
let minVal = transform(minIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let index = 1; index < value.length; index++) {
|
||||||
const it = value[index];
|
const it = value[index];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val < minVal) {
|
if (val < minVal) {
|
||||||
min = it;
|
minIt = it;
|
||||||
minVal = val;
|
minVal = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return min;
|
return minIt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
export function minByOrNull<T>(value: T[], transform: (it: T) => number): T | null {
|
export function minByOrNull<T>(value: T[], transform: (it: T) => number): T | null {
|
||||||
if (value.length === 0) return null;
|
if (value.length === 0) return null;
|
||||||
let min = value[0];
|
let minIt = value[0];
|
||||||
let minVal = transform(min);
|
let minVal = transform(minIt);
|
||||||
for (let index = 1; index < value.length; index++) {
|
for (let index = 1; index < value.length; index++) {
|
||||||
const it = value[index];
|
const it = value[index];
|
||||||
const val = transform(it);
|
const val = transform(it);
|
||||||
if (val < minVal) {
|
if (val < minVal) {
|
||||||
min = it;
|
minIt = it;
|
||||||
minVal = val;
|
minVal = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return min;
|
return minIt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
export function reversed<T>(value: T[]): T[] {
|
export function reversed<T>(value: T[]): T[] {
|
||||||
return [...value].reverse();
|
return value.toReversed();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
export function sorted(value: number[]): number[] {
|
export function sorted(value: number[]): number[] {
|
||||||
return [...value].sort((a, b) => a - b);
|
return value.toSorted((a, b) => a - b);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
export function sortedBy<T>(value: T[], transform: (it: T) => number): T[] {
|
export function sortedBy<T>(value: T[], transform: (it: T) => number): T[] {
|
||||||
return [...value].sort((a, b) => transform(a) - transform(b));
|
return value.toSorted((a, b) => transform(a) - transform(b));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
export function sortedWith<T>(value: T[], compare: (a: T, b: T) => number): T[] {
|
export function sortedWith<T>(value: T[], compare: (a: T, b: T) => number): T[] {
|
||||||
return [...value].sort(compare);
|
return value.toSorted(compare);
|
||||||
}
|
}
|
||||||
|
|||||||
6
src/collection/toObject.ts
Normal file
6
src/collection/toObject.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export type Key = keyof any
|
||||||
|
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> {
|
||||||
|
return Object.fromEntries(value) as Object<K, V | undefined>;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user