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 相关文章推荐
ExtJs的Date格式字符代码
Dec 30 Javascript
apycom出品的jQuery精美菜单破解方法
Feb 18 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
Dec 23 Javascript
jquery struts 验证唯一标识(公用方法)
Mar 27 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
微信小程序wx.previewImage预览图片实例详解
Dec 07 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 Javascript
jQuery实现电梯导航模块
Dec 22 jQuery
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
URL Rewrite的设置方法
2007/01/02 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
php实现session共享的实例方法
2019/09/19 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
django框架forms组件用法实例详解
2019/12/10 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
应聘文员自荐信范文
2014/03/11 职场文书
公司任命书范本
2014/06/04 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers