object-loops
Functional methods like forEach, map, filter, and other Array methods for Objects in javascript
Installation
npm install object-loops
Index
Usage
object-loops/<loop>
You can require each method individually var filter = var forEach = var mapKeys = var map = var reduce = //... and more// usage
object-loops/chain
If you want to chain multiple object-loops use var chain = // must be called at the end to return modified object
If you want to use forEach, map, reduce, filter, etc methods directly on objects:
// extends Object.prototypeobjobjobjobjobj
every
Tests whether every value in the object passes the test implemented by the callback.
- @function module:object-loops/every
- @param {object} [obj] - object to iterate through, not accepted if being used directly on Object.prototype
- @param {everyCallback} callback - function to test each value in the object. return falsey to end the loop, truthy otherwise.
- @param {*} [thisArg] - optional. context to bind to callback
- @returns {boolean} if callback returns false, the loop is ended and false is returned (else false)
var every = var obj = foo: 10 bar: 20 baz: 30 qux: 40var allGreaterThan25 = allGreaterThan25 // false*/
inverse
Creates a new object with keys and values flipped.
- @param {object} [obj] - object to inverse keys and values, not accepted if being used directly on Object.prototype
- @returns {object} newly created object with inversed values
var inverse = var obj = foo: 10 bar: 20 baz: 30var inversedObj = inversedObj /* keys and vals are flipped{ '10': 'foo', '20': 'bar', '30': 'baz'}*/
filter
Creates a new object with all entries that pass the test implemented by the provided function.
- @param {object} [obj] - object to filter values, not accepted if being used directly on Object.prototype
- @param {function} callback - function to test each value in the object. return true to keep that entry, false otherwise.
- @param {*} [thisArg] - optional. context to bind to callback
- @returns {object} newly created object with filtered values
var filter = var obj = foo: 10 bar: 20 baz: 30 qux: 40var filteredObj = filteredObj /* Only has entries with vals greater than 25{ baz: 30, qux: 40}*/
find
Find the value of the the object that passes the test implemented by the callback.
- @param {object} [obj] - object to iterate through, not accepted if being used directly on Object.prototype
- @param {findCallback} callback - function to test each value in the object. return truthy to end the loop and return index, falsey otherwise.
- @param {*} [thisArg] - optional. context to bind to callback
- @returns {*} if callback returns true, the loop is ended and the passing
val
is returned (else undefined)
var find = var obj = foo: 10 bar: 20 baz: 30 qux: 40var key = key // 30var notfound = notfound // undefined*/
findKey
Find the key of the the object that passes the test implemented by the callback. Very similar to Array.prototype.findIndex
- @param {object} [obj] - object to iterate through, not accepted if being used directly on Object.prototype
- @param {findKeyCallback} callback - function to test each value in the object. return truthy to end the loop and return index, falsey otherwise.
- @param {*} [thisArg] - optional. context to bind to callback
- @returns {*} if callback returns true, the loop is ended and the passing
key
is returned (else undefined)
var findKey = var obj = foo: 10 bar: 20 baz: 30 qux: 40var key = key // 'baz'var notfound = notfound // undefined*/
forEach
Executes a provided function once per each object value.
- @param {object} [obj] - object to forEach, not accepted if being used directly on Object.prototype
- @param {function} callback - function that will be invoked once for each key-value pair
- @param {*} [thisArg] - optional. context to bind to callback
var forEach = var obj = foo: 10 bar: 20 baz: 30var keyConcat = ''var valSum = 0keyConcat // = 'foobarbaz'valSum // = 60
keys
Equivalent to Object.keys
. Implemented specifically for chain.
var chain = var obj = foo: 10 bar: 20 baz: 30 // ['foo', 'bar', 'baz']
keysIn
Like to keys
, but includes enumerable keys from the prototype chain.
var keysIn = { thisname = name}Personprototype { return thisname} var person = 'foo'// ['name', 'getName']// for comparison, `keys` would return ['name']
mapKeys
Creates a new object with the results of calling a provided function on every key in the object.
- @param {object} [obj] - object to map keys, not accepted if being used directly on Object.prototype
- @param {mapKeysCallback} callback - function that produces the new key for the new mapped object
- @param {*} [thisArg] - optional. context to bind to callback
- @returns {object} newly created object with mapped keys
var mapKeys = var obj = foo: 10 bar: 20 baz: 30var mappedObj = mappedObj /* Each key is concated w/ 'New'{ fooNew: 10, barNew: 20, bazNew: 30}*/
map
Creates a new object with the results of calling a provided function on every value in the object.
- @param {object} [obj] - object to map values, not accepted if being used directly on Object.prototype
- @param {function} callback - function that produces the new value for the new, mapped object
- @param {*} [thisArg] - optional. context to bind to callback
- @returns {object} newly created object with mapped values
var map = var obj = foo: 10 bar: 20 baz: 30var mappedObj = mappedObj /* Each val multiplied by 2{ foo: 20, bar: 40, baz: 60}*/
reduce
Applies a function against an accumulator and each value of the object to reduce it to a single value.
- @param {object} [obj] - object to reduce values, not accepted if being used directly on Object.prototype
- @param {function} callback - function to test each value in the object. return true to keep that entry, false otherwise.
- @param {*} [initialValue] - optional. object to use as the first argument to the first call of the callback
- @returns {*} finalValue - final value returned by reduction, or just first val if only one exists.
var reduce = var obj = foo: 10 bar: 20 baz: 30var sum = sum // 60
some
Tests whether some value in the object passes the test implemented by the callback.
- @function module:object-loops/some
- @param {object} [obj] - object to iterate through, not accepted if being used directly on Object.prototype
- @param {someCallback} callback - function to test each value in the object. return truthy to end the loop, falsey otherwise.
- @param {*} [thisArg] - optional. context to bind to callback
- @returns {boolean} if callback returns true, the loop is ended and true is returned (else false)
var some = var obj = foo: 10 bar: 20 baz: 30 qux: 40var anyGreaterThan25 = anyGreaterThan25 // true*/
values
Like to keys
, but returns direct enumerable values.
var values = { thisname = name}Personprototype { return thisname} var person = 'foo'// ['foo']// for comparison, `valuesIn` would return ['foo', Person.prototype.getName]
valuesIn
Like to keys
, but returns direct enumerable values including prototype chain.
var valuesIn = { thisname = name}Personprototype { return thisname} var person = 'foo'// ['foo', Person.prototype.getName]
License
MIT