Skip to content

Instantly share code, notes, and snippets.

// FUNCIONES AUXILIARES
/*
* La siguiente función cuenta las propiedades
* (tanto propias como hereradas) de un objeto
*/
function contarPropiedades(obj) {
var recuento = 0;
for (propiedad in obj) recuento ++;
@joseanpg
joseanpg / aplaneitor2.js
Created August 13, 2011 18:43 — forked from juandopazo/gist:1144127
Concatenar arrays anidados recursivamente
function aplaneitor2(arr,sep){
return function step(a){return Array.isArray(a) ? a.map(step).join(sep) : a}(arr);
}
var test = ["hola", ["soy", ["juan", "fernandez"] ], "y", ["no", "tengo", ["dinero"] ] ];
console.log(aplaneitor2(test,'**')) // -> hola**soy**juan**fernandez**y**no**tengo**dinero
/* Abstracción!!!
*
* En la función aplaneitor de https://gist.github.com/1143902
* podemos apreciar el esquema foldl (reduce)
* En esta versión se ha generalizado dicha función
* obteniendo una versión de foldl valido para "árboles de arrays"
*/
function foldl(f,acu,soa) {
if (soa instanceof Array) {
var phineas = (function(){
function aplaneitor(soa,acu) {
if (soa instanceof Array) {
for (var j=0, len = soa.length;j<len;j++) {
aplaneitor(soa[j],acu);
}
}
else {
acu.push(soa);
}
/* Son objetivos fundamentales:
* - Minimizar las funciones ECMAScript utilizadas
* - Optimizar en espacio, evitando la creación de arrays transitorios
*
* Suponemos que no se utilizará esta función con arrays creados
* en frames externos, con lo cual instanceof Array es seguro
*/
function aplaneitor(soa,acu) {
if (soa instanceof Array) {
var concatenate = (function(){
var params;
//Auxiliares "privados"
function hasElements(){return params.length>0;}
function createString(){
var res = "";
for(var i=0;i<params.length;i++){
@joseanpg
joseanpg / gist:947455
Created April 28, 2011 22:05
humane.js
/**
* HumaneJS
* Humanized Messages for Notifications
* @example
* humane('hello world');
*/
;(function(win,doc){
var eventOn, eventOff;
if (win.addEventListener) {
@joseanpg
joseanpg / gist:947255
Created April 28, 2011 20:24
humane.js unnecessary let
/**********************************************************************
Current Version: unnecessary scope
**********************************************************************/
eventOn('load',function(){
transitionSupported = (function(style){ //Surplus
var prefixes = ['MozT','WebkitT','OT','msT','KhtmlT','t'];
for(var i = 0, prefix; prefix = prefixes[i]; i++){
if(prefix+'ransition' in style) return true;
}
return false;
@joseanpg
joseanpg / gist:947190
Created April 28, 2011 20:02
Memoizing Event Register Functions
/***********************************************************************
Initial Version
************************************************************************/
var eventOn = function(type,fn){ win.addEventListener ?
win.addEventListener(type,fn,false) :
win.attachEvent('on'+type,fn)},
eventOff = function(type,fn){ win.removeEventListener ?
win.removeEventListener(type,fn,false) :
win.detachEvent('on'+type,fn)},
@joseanpg
joseanpg / gist:935161
Created April 21, 2011 18:18
Modules ( R7RS-Draft 9 March 2011)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Defining a module
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(module (sillymul)
;;The body
(begin
;;Private