Pages

Sunday, June 12, 2016

A bunch of Underscore's functions rewrites in one place:

var _ = {};

 _.identity = function(val){
    return val;
};



 _.first = function(array, n){
    return n === undefined ? array[0] : array.slice(0, n);
 }

 _.last = function(array, n){
    if(n === 0){
      return [];
    }

   return n === undefined ? array[array.length -1] : array.slice(-n);
}


 _.each = function(collection, callback){
    if(Array.isArray(collection)){
      for(var i = 0; i < collection.length; i ++){
        callback(collection[i], i, collection);
      }
    }
    else{
      for(var key in collection){
        callback(collection[key], key, collection);
      }
    }
}



 _.indexOf = function(array, target){
    var result = -1;
    var initial = 0;
    _.each(array, function(item, index){
      if(item === target && initial === 0){
        result = index;
        initial ++;
      }
});
    return result;
}



 _.filter = function(array, callback){
    var filterArray = [];
    _.each(array, function(item){
      if(callback(item)){
        filterArray.push(item);
      }
    })
    return filterArray;
}



 _.map = function(array, callback){
    var mapArray = [];

    _.each(array, function(item){
      mapArray.push(callback(item));
    });
return mapArray;
}




 _.uniq = function(array){
    var uniqArray = [];
   
    _.each(array, function(item){
      if(_.indexOf(uniqArray, item) === -1){
        uniqArray.push(item);
      }
    });
    return uniqArray;
}

 _.contains = function(collection, target){
    var result = false;

    _.each(collection, function(item){
      if(item === target){
        result = true;
      }
    });
    return result;
}


 _.pluck = function(array, prop){
    var pluckArray = [];

    _.each(array, function(item){
      pluckArray.push(item[prop]);
    })
    return pluckArray;
}



 _.reduce = function(collection, callback, accumulator){
    var initial = 0;

    _.each(collection, function(item){
      if(accumulator === undefined && initial === 0){
        accumulator = item;
      }
      else{
        accumulator = callback(accumulator, item);
      }
    });
    return accumulator;
}




 _.reject = function(array, callback){
    return _.filter(array, function(item){
      return !callback(item);
    });
}



 _.every = function(array, callback){
    callback = callback || _.identity;
    return !! _.reduce(array, function(a, b){
      return a && callback(b);
    }, true);
}




 _.some = function(array, callback){
    callback = callback || _.identity;
    return !! _.reduce(array, function(a, b){
      return a || callback(b);
    }, false);
}



 _.extend = function(obj){
    _.each(arguments, function(item){
      _.each(item, function(value, prop){
        obj[prop] = value;
      })
    });
    return obj;
}










  

No comments:

Post a Comment