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 相关文章推荐
基于jquery实现的定时显示与隐藏div广告的实现代码
Aug 22 Javascript
JS实现表格数据各种搜索功能的方法
Mar 03 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
Mar 23 jQuery
Angular2安装angular-cli
May 21 Javascript
深入理解vue中的$set
Jun 01 Javascript
JS 组件系列之BootstrapTable的treegrid功能
Jun 16 Javascript
JS+canvas动态绘制饼图的方法示例
Sep 12 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
如何实现小程序tab栏下划线动画效果
May 18 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 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
我的论坛源代码(一)
2006/10/09 PHP
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
JS实现数组去重复值的方法示例
2017/02/18 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
python基础教程之Hello World!
2014/08/29 Python
python遍历类中所有成员的方法
2015/03/18 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
python定时任务 sched模块用法实例
2019/11/04 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
专科毕业生就业推荐信
2013/11/01 职场文书
学校安全防火方案
2014/06/07 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
党的群众路线调研报告
2014/11/03 职场文书
大学生党性分析材料
2014/12/19 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
什么是SOLID
2022/03/24 Javascript
什么是Python装饰器?如何定义和使用?
2022/04/11 Python