Useful easy-to-use utilities for JavaScript objects
npm install objectools> Useful easy-to-use utilities for JavaScript objects






- Features
- Installation
- Usage
- Examples
- .filter()
- .map(), .mapKeyValue
- .keys, .values, .entries, .length
- .find(), .findIndex(), .findKey(), .findValue()
- .findLast(), .findLastIndex(), .findLastKey(), .findLastValue()
- .indexOf(), .lastIndexOf(), .indexOfKey()
- .sort(), .sortByValues()
- .some(), .every()
- .omit()
- .flip()
- .reverse()
- Chain methods
- .transpose()
- Usage with Jest
- Easy to use, w/o
modifying object prototype (o(obj).filter(...))
- Useful methods that are operable on keys, values and indices (see Examples):
- filter()
- map() & mapKeyValue(), forEach()
- find(), findIndex(), findLast(), findLastIndex()>)
- indexOf(), lastIndexOf(), indexOfKey()>)
- sort(),
- reverse()
- some(), every()
- omit() // omit key(s)
- flip(), transpose()
- and properties:
- .length
- .keys, .values, .entries
- Provides an easy way to chain methods
- Typed keys and values
- No dependency, based on modern JS features
- Memory and processor efficient
- Returns Set instead
of Array for .keys (
see: _Why does Object.keys() return an Array instead of
a Set?_)
``bash`
npm i objectools
or:
`bash`
yarn add objectools
`ts
import o from '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..oSort()
// I.e. don't write if you don't want to countinue the chain.`
`ts`
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}
`ts`
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}
`tsSet<'a' | 'b' | 'c'>
o({a: 1, b: 2, c: 3}).keys // Set {'a', 'b', 'c'} // Type: number[]
o({a: 1, b: 2, c: 3}).values // [1, 2, 3] // Type: `
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
`ts`
o({a: 1, b: 2, c: 3}).find((value) => value > 1) // ['b', 2]
o({a: 1, b: 2, c: 3}).findIndex((value) => value > 1) // 1
o({a: 1, b: 2, c: 3}).findKey((value) => value > 1) // 'b'
o({a: 1, b: 2, c: 3}).findValue((value) => value > 1) // 2
`ts`
o({a: 1, b: 2, c: 3}).findLast((value) => value > 1) // ['c', 3]
o({a: 1, b: 2, c: 3}).findLastIndex((value) => value > 1) // 2
o({a: 1, b: 2, c: 3}).findLastKey((value) => value > 1) // 'c'
o({a: 1, b: 2, c: 3}).findLastValue((value) => value > 1) // 3
`ts`
o({a: 3, b: 3}).indexOf(3) // 0
o({a: 3, b: 3}).lastIndexOf(3) // 1
o({a: 3, b: 3}).indexOfKey('b') // 1
`ts`
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}
`ts`
o({a: 1, b: 2, c: 3}).some((value) => value > 1) // true
o({a: 1, b: 2, c: 3}).every((value) => value > 1) // false
`ts`
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}
`ts`
o({a: 'x', b: 'y'}).flip() // {x: 'a', y: 'b'}
`ts`
o({a: 'x', b: 'y'}).reverse() // {b: 'y', a: 'x'}
`ts`
o({b: 1, a: 2, c: 3})
.oFilter((value) => value < 3)
.oMap((value) => value * 2)
.sort()
// --> {a: 4, b: 2}
`ts`
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},
// }
You may need to add this to your _"jest.config.js"_ file:
`js?!
export default {
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_