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 相关文章推荐
javascript 图片上传预览-兼容标准
Jun 01 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
Apr 20 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
jQuery中ajax的使用与缓存问题的解决方法
Dec 19 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
jQuery链使用指南
Jan 20 Javascript
javascript实现Email邮件显示与删除功能
Nov 21 Javascript
html5+javascript实现简单上传的注意细节
Apr 18 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
Sep 09 Javascript
jquery实现选项卡切换代码实例
May 14 jQuery
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
详解JS数组方法
Nov 20 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
PHP实现文件安全下载
2006/10/09 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
JS查看对象功能代码
2008/04/25 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
说一说Python logging
2016/04/15 Python
Python编码爬坑指南(必看)
2016/06/10 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
2015年感恩母亲节活动方案
2015/05/04 职场文书
开工典礼致辞
2015/07/29 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js