lodown-seancsutton1
Version:
An npm functional programming library project
337 lines (189 loc) • 6.96 kB
JavaScript
// YOU KNOW WHAT TO DO //
/**
* each: Designed to loop over a collection, Array or Object, and applies the
* action Function to each value in the collection.
*
* @param {Array or Object} collection: The collection over which to iterate.
* @param {Function} action: The Function to be applied to each value in the
* collection
*/
function each(collection, action) {
if(Array.isArray(collection)) {
for(var i = 0; i < collection.length; i++) {
action(collection[i], i, collection);
}
} else {
for (var key in collection) {
action(collection[key], key, collection);
}
}
}
module.exports.each = each;
var identity = function(anything){
return anything;
}
module.exports.identity = identity;
var typeOf = function(anything){
if (Array.isArray(anything)){
return "array"
}else if (anything instanceof Date){
return "date"
}else if (anything === null){
return "null"
}else { return typeof anything
}
}
module.exports.typeOf = typeOf;
var first = function (collection, number ){
var result = [];
if (Array.isArray(collection) !== true){
return result;
} else if (number === undefined || typeof(number) !== "number"){
return collection[0];
}else if (collection.length < number){
return collection
}else if (typeof(number) === "number"){
for (var i = 0 ; i <= number - 1 ; i++){
result.push(collection[i]);
}
}return result;
}
module.exports.first = first;
var last = function (collection, number ){
var result = [];
if (Array.isArray(collection) !== true){
return result;
} else if (number === undefined || typeof(number) !== "number"){
return collection[collection.length - 1];
}else if (collection.length < number){
return collection
}else if (typeof(number) === "number"){
for (var i = collection.length - number ; i <= collection.length - 1 ; i++){
result.push(collection[i]);
}
}return result;
}
module.exports.last = last;
var indexOf = function(array, value){
for(var i = 0 ; i < array.length; i ++){
if(value === array[i]){
return i;
}
} return - 1;
};
module.exports.indexOf = indexOf;
var filter = function(collection, action ){
var results = [];
each(collection,function (value,index,collection){
if (action(value,index,collection)){
results.push(value);
}
})
return results;
}
module.exports.filter = filter;
var reject = function(collection, action ){
var results = [];
each(collection,function (value,index,collection){
if (!action(value,index,collection)){
results.push(value);
}
})
return results;
}
module.exports.reject = reject;
var partition = function(collection, action){
var results = []
var passed = []
var rejected = [];
each(collection,function (value,index,collection){
if (!action(value,index,collection)){
rejected.push(value);
}else if (action(value,index,collection)){
passed.push(value);
}
})
results.push(passed);
results.push(rejected)
return results;
}
module.exports.partition = partition;
var unique = function(array){
var results = [];
each(array,function(value,index,collection){
if (indexOf(results,value) === -1){
results.push(value)
}
})
return results;
}
module.exports.unique = unique;
map = function(collection, action){
var results = []
each(collection,function(value,index,collection){
results.push(action(value,index,collection))
})
return results;
module.exports.map = map;
pluck = function(collection, prop){
var results = [];
map(collection, function(value, index , collection){
if (value[prop]){
results.push(value[prop])
}
})
return results;
module.exports.pluck = pluck;
contains = function(collection, value){ return (indexOf(collection,value) > -1) ? true : false}
module.exports.contains = contains;
every = function(collection, action){
var results = true
each(collection, function(value, index ,collection){
if (action && !action(value,index,collection)){
results = false
}else if (!value){
results = false;
}
})
return results;
}
module.exports.every = every;
some = function(collection, action){
var results = false;
each(collection, function(value, index ,collection){
if (action && !!action(value,index,collection)){
results = true
}else if (action === undefined){
results = !!value;
}
})
return results
}
module.exports.some = some;
reduce = function(collection, action, seed ){
var results;
if(seed === undefined){
results = collection[0]
}else{
results = seed
}
each(collection, function(value, index, collection ){
if (index === 0 && seed === undefined ){
return;
}
results = action(results,value,index)
})
return results;
}
module.exports.reduce = reduce;
extend = function(...args){
var object1 = args[0]
each(args,function(value,index,args){
for (var key in value){
object1[key] = value[key];
}
})
return object1;
}
module.exports.extend = extend;
;