inspired by Python list method :
list.__getitem__
andlist.__setitem__
$ pnpm install list-slice
import { getitem, setitem, pop } from "list-slice"
getitem(arr, index)
getitem(arr, [stop])
getitem(arr, [start, stop])
getitem(arr, [start, stop, step])
getitem(arr, { start, stop, step })
const arr = [1, 2, 3, 4, 5]
// python arr[2:]
getitem(arr, [2,,]) // [3, 4, 5]
// python arr[3::-1]
getitem(arr, [3,,-1]) // [4, 3, 2, 1]
[2,,]
is different than [2,]
or you can just use [2, null]
.
setitem(arr, index, newItem)
setitem(arr, [stop], newArr)
setitem(arr, [start, stop], newArr)
setitem(arr, [start, stop, step], newArr)
setitem(arr, { start, stop, step }, newArr)
const arr = [1, 3, 4, 5]
// python arr[:] = [7, 8, 9]
setitem(arr, [], [7, 8, 9])
console.log(arr) // [7, 8, 9]
// python arr[2:] = [7, 8, 9]
setitem(arr, [2,,], [7, 8, 9])
console.log(arr) // [7, 8, 7, 8, 9]
pop(arr)
pop(arr, index)
const arr = [1, 3, 4, 5]
// python arr.pop(0)
const first = pop(arr, 0)
console.log(first, arr) // 1 [3, 4, 5]
python-like error name:
const a = getitem([1,2,3], 3)
^
SliceIndexError [RangeError]: array index out of range
at file:///c:/Users/Administrator/Desktop/test.mjs:3:11
at ModuleJob.run (internal/modules/esm/module_job.js:183:25)
at async Loader.import (internal/modules/esm/loader.js:178:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)
at async handleMainPromise (internal/modules/run_main.js:59:12)
It was exported with cjs
,esm
,iife
format and named exports.
No export is transpiled for sake of modern syntax.
It can only run on node14+ and modern browsers.
Coverage 100%
------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
error.ts | 100 | 100 | 100 | 100 |
getitem.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
pop.ts | 100 | 100 | 100 | 100 |
setitem.ts | 100 | 100 | 100 | 100 |
slice.ts | 100 | 100 | 100 | 100 |
------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 47 passed, 47 total