|
export function last<T>(arr: T[]): T | undefined { |
|
return arr[arr.length - 1]; |
|
} |
|
|
|
export function randomPick<T>(arr: T[]): T | undefined { |
|
return arr[Math.floor(Math.random() * arr.length)]; |
|
} |
|
|
|
|
|
export function edit<T>(arr: T[], index: number, newValue: T): T[] { |
|
return arr.map((value, i) => (i === index ? newValue : value)); |
|
} |
|
|
|
type IterateReturn<T> = [ |
|
T, |
|
{ |
|
isFirst: boolean; |
|
isLast: boolean; |
|
array: T[]; |
|
index: number; |
|
length: number; |
|
}, |
|
]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function* iterate<T>(array: T[]): Generator<IterateReturn<T>> { |
|
for (let i = 0; i < array.length; i++) { |
|
yield [ |
|
array[i]!, |
|
{ |
|
isFirst: i === 0, |
|
isLast: i === array.length - 1, |
|
array, |
|
index: i, |
|
length: array.length, |
|
}, |
|
]; |
|
} |
|
} |
|
|