forEach
Array.prototype.$forEach = function (fn) { var _arr = this, len = _arr.length, ctx = arguments[1] || window, item; for (var i = 0; i < len; i ++) { item = _arr[i]; fn.apply(ctx, [item, i, _arr]); }}
map
Array.prototype.$map = function (fn) { var _arr = this, len = _arr.length, ctx = arguments[1] || window, res = [], item; for (var i = 0; i < len; i ++) { item = _arr[i]; res.push(fn.apply(ctx, [item, i, _arr])); } return res;}console.log([1, 2, 3].$map(item => item * 2));
filter
Array.prototype.$filter = function (fn) { var _arr = this, len = _arr.length, ctx = arguments[1] || window, res = [], item; for (var i = 0; i < len; i ++) { item = _arr[i]; if (fn.apply(ctx, [item, i, _arr])) { res.push(item); } } return res;}
some
Array.prototype.$some = function (fn) { var _arr = this, len = _arr.length, ctx = arguments[1] || window, item; for (var i = 0; i < len; i ++) { item = _arr[i]; if (fn.apply(ctx, [item, i, _arr])) { return true; } } return false;}
every
Array.prototype.$every = function (fn) { var _arr = this, len = _arr.length, ctx = arguments[1] || window, item; for (var i = 0; i < len; i ++) { item = _arr[i]; if (!fn.apply(ctx, [item, i, _arr])) { return false; } } return true;}
reduce
Array.prototype.$reduce = function (fn, initialVal) { var _arr = this, len = _arr.length, ctx = arguments[2] || window, item; for (var i = 0; i < len; i ++) { item = _arr[i]; initialVal = fn.apply(ctx, [initialVal, item, i, _arr]); } return initialVal;}