UNPKG

lodown-seancsutton1

Version:

An npm functional programming library project

337 lines (189 loc) 6.96 kB
'use strict'; // 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;