Skip to content

Repository files navigation

ObjecTools

Useful easy-to-use utilities for JavaScript objects

npm (scoped)install sizedownloads
licenseForksStars

Table of contents

Features

Installation

npm i objectools

or:

yarn add objectools

Usage

importofrom'objectools'o({a: 1,b: 2,c: 3}).filter(/*...*/)o({a: 1,b: 2,c: 3}).map(/*...*/)o({a: 1,c: 3,b: 2}).sort()o({...})//...// Or chain methods:o({...}).oFilter(/*...*/).oMap(/*...*/).sort()// Don't prefix the last one with `o`.// I.e. don't write `.oSort()` if you don't want to countinue the chain.

Examples

o({a: 1,b: 2,c: 3}).filter((value)=>value>1)// {b: 2, c: 3}o({a: 1,b: 2,c: 3}).filter((_,key,index)=>key<'c'&&index>0)// {b: 2}
o({a: 1,b: 2,c: 3}).map((value)=>value*2)// {a: 2, b: 4, c: 6}o({a: 1,b: 2,c: 3}).mapKeyValue((value,key)=>[key.toUpperCase(),value-1])// {A: 0, B: 1, C: 2}

.keys, .values, .entries, .length

o({a: 1,b: 2,c: 3}).keys// Set {'a', 'b', 'c'} // Type: `Set<'a' | 'b' | 'c'>`o({a: 1,b: 2,c: 3}).values// [1, 2, 3] // Type: `number[]`o({a: 1,b: 2,c: 3}).entries// [['a', 1], ['b', 2], ['c', 3]] // Type: ['a' | 'b' | 'c', number][]o({a: 1,b: 2,c: 3}).length// 3

.find(), .findIndex(), .findKey(), .findValue()

o({a: 1,b: 2,c: 3}).find((value)=>value>1)// ['b', 2]o({a: 1,b: 2,c: 3}).findIndex((value)=>value>1)// 1o({a: 1,b: 2,c: 3}).findKey((value)=>value>1)// 'b'o({a: 1,b: 2,c: 3}).findValue((value)=>value>1)// 2

.findLast(), .findLastIndex(), .findLastKey(), .findLastValue()

o({a: 1,b: 2,c: 3}).findLast((value)=>value>1)// ['c', 3]o({a: 1,b: 2,c: 3}).findLastIndex((value)=>value>1)// 2o({a: 1,b: 2,c: 3}).findLastKey((value)=>value>1)// 'c'o({a: 1,b: 2,c: 3}).findLastValue((value)=>value>1)// 3

.indexOf(), .lastIndexOf(), .indexOfKey()

o({a: 3,b: 3}).indexOf(3)// 0o({a: 3,b: 3}).lastIndexOf(3)// 1o({a: 3,b: 3}).indexOfKey('b')// 1

.sort(), .sortByValues()

o({b: 1,a: 3,c: 2}).sort()// {a: 3, b: 1, c: 2}o({b: 1,a: 3,c: 2}).sortByValues()// {b: 1, c: 2, a: 3}
o({a: 1,b: 2,c: 3}).some((value)=>value>1)// trueo({a: 1,b: 2,c: 3}).every((value)=>value>1)// false

.omit()

o({a: 1,b: 2,c: 3}).omit('b')// {a: 1, c: 3}o({a: 1,b: 2,c: 3}).omit('c','a')// {b: 2}

.flip()

o({a: 'x',b: 'y'}).flip()// {x: 'a', y: 'b'}
o({a: 'x',b: 'y'}).reverse()// {b: 'y', a: 'x'}

Chain methods

o({b: 1,a: 2,c: 3}).oFilter((value)=>value<3).oMap((value)=>value*2).sort()// --> {a: 4, b: 2}

.transpose()

o({x: {a: 1,b: 2},y: {a: 3,b: 4},z: {a: 5,b: 6},}).transpose()// -->// {// a: {x: 1, y: 3, z: 5},// b: {x: 2, y: 4, z: 6},// }

Usage with Jest

You may need to add this to your "jest.config.js" file:

exportdefault{transformIgnorePatterns: [// These packages are created based on modern javascript and use ESM module system (import/export). But Jest use// old common-js module-system. So we need to transform these files using babel, too (like source files). Note that// "node_modules" folder is ignored by default, and we've EXCLUDED these packages from this general rule (see `?!`// in the below regex).'/node_modules/(?!(objectools)/)',}

See: https://stackoverflow.com/a/49676319/5318303/#jest-gives-an-error-syntaxerror-unexpected-token-export

Releases

Packages

Used by

Contributors

Languages