Skip to content

implementation of Python built-in type : `list.__getitem__` and `list.__setitem__`

License

Notifications You must be signed in to change notification settings

nanarino/list-slice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Oct 23, 2023
4a90e66 · Oct 23, 2023

History

24 Commits
Oct 21, 2023
Oct 21, 2023
Sep 3, 2022
Sep 2, 2022
Oct 21, 2023
Oct 23, 2023
Aug 31, 2023
Aug 31, 2023

Repository files navigation

list-slice

inspired by Python list method : list.__getitem__ and list.__setitem__

Install

$ pnpm install list-slice

Usage

import { getitem, setitem, pop } from "list-slice"

getitem

  • 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

  • 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

  • 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]

Handling Errors

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)

Bundler notes

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.

Test

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

About

implementation of Python built-in type : `list.__getitem__` and `list.__setitem__`

Topics

Resources

License

Stars

Watchers

Forks