Last active
January 31, 2016 11:07
-
-
Save Cfeusier/e2d065c2216dacba2806 to your computer and use it in GitHub Desktop.
2kb unminified/unzipped drop-in for the usual utility functions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var underramdash = { | |
each: each, | |
map: map, | |
reduce: reduce, | |
filter: filter, | |
flatten: flatten, | |
uniq: uniq, | |
extend: extend, | |
every: every, | |
identity: identity | |
}; | |
module.exports = underramdash; | |
function each(collection, iterator) { | |
if (Array.isArray(collection)) { | |
collection.forEach(function(item, i) { | |
iterator(item, i, collection); | |
}); | |
} else { | |
for (var key in collection) { | |
if (collection.hasOwnProperty(key)) { | |
iterator(collection[key], key, collection); | |
} | |
} | |
} | |
} | |
function map(collection, callback) { | |
var mapped = []; | |
each(collection, function(item) { | |
mapped.push(callback(item)); | |
}); | |
return mapped; | |
} | |
function reduce(collection, iterator, accumulator) { | |
var initd = arguments.length === 3; | |
each(collection, function(value) { | |
if (!initd) { | |
accumulator = value; | |
initd = true; | |
} else { | |
accumulator = iterator(accumulator, value); | |
} | |
}); | |
return accumulator; | |
} | |
function filter(collection, predicate) { | |
var filtered = []; | |
each(collection, function(item) { | |
if (predicate(item)) { | |
filtered.push(item); | |
} | |
}); | |
return filtered; | |
} | |
function flatten(mdArray, fltArray) { | |
fltArray = fltArray || []; | |
each(mdArray, function(item) { | |
Array.isArray(item) ? flatten(item, fltArray) : fltArray.push(item); | |
}); | |
return fltArray; | |
} | |
function uniq(dupeArray) { | |
var deDupedHisto = {}, | |
deDupedResults = []; | |
each(dupeArray, function(value) { | |
deDupedHisto[value] = value; | |
}); | |
each(deDupedHisto, function(item) { | |
deDupedResults.push(item); | |
}); | |
return deDupedResults; | |
} | |
function extend(destObj) { | |
for (var i = 1; i < arguments.length; i++) { | |
var sourceObj = arguments[i]; | |
each(sourceObj, function(item, key) { | |
destObj[key] = item; | |
}); | |
} | |
return destObj; | |
} | |
function every(collection, predicate) { | |
predicate = predicate || identity(predicate); | |
return !!reduce(collection, function(trueSoFar, value) { | |
return trueSoFar && predicate(value); | |
}, true); | |
} | |
function identity() { | |
return function(value) { | |
return value; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment