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