Medium
by hguerra
JavaScript
function last(arr){
return arr[arr.length-1];
}
function clone(arr){
var newArr = [];
for (var i = 0; i < arr.length; i++){
newArr[i] = arr[i];
}
return newArr;
}
function push(arr, elem){
arr[arr.length] = elem;
return arr;
}
function purePop(arr){
var newArr = [];
for (var i = 0; i < arr.length-1; i++){
newArr[newArr.length] = arr[i];
}
return newArr;
}
function shift(arr){
var first = arr[0];
for (var i = 1; i < arr.length; i++){
arr[i-1] = arr[i];
}
arr.length = arr.length > 0 ? arr.length - 1 : 0;
return first;
}
function unshift(arr, elem){
var temp = clone(arr);
for (var i = 0; i <= temp.length; i++){
arr[i] = i === 0 ? elem : temp[i-1];
}
return arr;
}
function concat(arr, list){
var newArr = clone(arr);
for (var i = 0; i < list.length; i++){
newArr[newArr.length] = list[i];
}
return newArr;
}
function includes(arr, elem){
for (var i = 0; i < arr.length; i++){
if (arr[i] === elem){
return true;
}
}
return false;
}
function fill(length, arr){
var arr = arr === undefined ? [] : arr;
var newArr = [];
for (var i = 0; i < length; i++){
newArr[newArr.length] = arr[i];
}
return newArr;
}
function filter(arr, callback, external){
var thisArg = {'value': external};
var newArr = [];
for (var i = 0; i < arr.length; i++){
var elem = arr[i];
var val = external === undefined
? callback(elem, i, arr)
: callback.apply(thisArg, [elem, i, arr]);
if (val)
newArr[newArr.length] = elem;
}
return newArr;
}
function map(arr, callback, external){
var thisArg = {"value": external};
var newArr = [];
for (var i = 0; i < arr.length; i++){
var elem = arr[i];
newArr[newArr.length] = external === undefined
? callback(elem, i, arr)
: callback.apply(thisArg, [elem, i, arr]);
}
return newArr;
}
function forEach(arr, callback){
for (var i = 0; i < arr.length; i++){
var elem = arr[i];
callback(elem, i, arr);
}
}
function reduce(arr, callback, thisArg){
var ref =...