JavaScript 5 新增 Array 方法实现介绍


Posted in Javascript onFebruary 06, 2012
/*! 
* jLip JavaScript Library v0.1 
* 
* Copyright 2012, Lip2up (lip2up@qq.com) 
* Just for free use, NO LICENSE 
*/ 
(function() { 
function extend(target, props) { 
for (var m in props) { 
if (target[m] === undefined) target[m] = props[m]; 
} 
} 
var fns = { every: 1, some: 2, forEach: 3, map: 4, filter: 5 }, 
reduceError = 'Reduce of empty array with no initial value'; 
function each(fn, _this, kind) { 
var len = this.length, ret = kind == fns.filter ? [] 
: kind == fns.map ? Array(len) : undefined, 
find = kind == fns.some, i, v; 
for (i = 0; i < len; i++) { 
if (this[i] !== undefined) { 
v = fn.call(_this, this[i], i, this); 
switch (kind) { 
case fns.every: 
case fns.some: 
if (v === find) return find; 
break; 
case fns.map: 
ret[i] = v; 
break; 
case fns.filter: 
if (v === true) ret[ret.length] = this[i]; 
break; 
} 
} 
} 
return kind >= fns.forEach ? ret : !find; 
} 
function reduce(fn, init, right) { 
var len = this.length, i, prev, inc = right ? -1 : 1; 
if (len == 0 && init === undefined) 
throw TypeError(reduceError); 
for (i = right ? len - 1 : 0, prev = init; 
prev === undefined && (right ? i >= 0 : i < len); 
i += inc) { 
prev = this[i]; 
} 
if (prev === undefined && i == (right ? -1 : len)) 
throw TypeError(reduceError); 
for (; (right ? i >= 0 : i < len); i += inc) { 
if (this[i] !== undefined) 
prev = fn(prev, this[i], i, this); 
} 
return prev; 
} 
extend(Array.prototype, { 
every: function(fn, _this) { 
return each.call(this, fn, _this, fns.every); 
}, 
some: function(fn, _this) { 
return each.call(this, fn, _this, fns.some); 
}, 
forEach: function(fn, _this) { 
return each.call(this, fn, _this, fns.forEach); 
}, 
map: function(fn, _this) { 
return each.call(this, fn, _this, fns.map); 
}, 
filter: function(fn, _this) { 
return each.call(this, fn, _this, fns.filter); 
}, 
reduce: function(fn, init) { 
return reduce.call(this, fn, init); 
}, 
reduceRight: function(fn, init) { 
return reduce.call(this, fn, init, true); 
} 
}); 
})();
Javascript 相关文章推荐
Prototype使用指南之base.js
Jan 10 Javascript
js获取或设置当前窗口url参数的小例子
Oct 14 Javascript
jQuery操作DOM之获取表单控件的值
Jan 23 Javascript
JQuery简单实现锚点链接的平滑滚动
May 03 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
js实现小窗口拖拽效果
Dec 03 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
JavaScript实现购物车基本功能
Jul 21 Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 Javascript
JS中封装axios来管控api的2种方式
Sep 11 Javascript
layer.open 获取不到表单信息的解决方法
Sep 26 Javascript
js实现登录拖拽窗口
Feb 10 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
Feb 03 #Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
Feb 03 #Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
Feb 03 #Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 #Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 #Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 #Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
Feb 03 #Javascript
You might like
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
独特的python循环语句
2016/11/20 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
python支持多线程的爬虫实例
2019/12/21 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
关于.NET, HTML的五个问题
2012/08/29 面试题
中专生自我鉴定范文
2014/02/02 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
移交协议书
2014/08/19 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
优秀班主任申报材料
2014/12/16 职场文书
城管个人总结
2015/02/28 职场文书
免职通知
2015/04/23 职场文书
运动会5000米加油稿
2015/07/21 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
SpringBoot集成Redis的思路详解
2021/10/16 Redis