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 相关文章推荐
js获取变量
Aug 24 Javascript
在JavaScript中获取请求的URL参数
Dec 22 Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
Mar 22 Javascript
自定义百度分享的分享按钮
Mar 18 Javascript
js代码验证手机号码和电话号码是否合法
Jul 30 Javascript
JavaScript File分段上传
Mar 10 Javascript
vue2.0.js的多级联动选择器实现方法
Feb 09 Javascript
微信小程序商品详情页的底部弹出框效果
Nov 16 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
Jun 25 Javascript
小程序实现侧滑删除功能
Jun 25 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
实用函数10
2007/11/08 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
PHP引用的调用方法分析
2016/04/25 PHP
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
js简易版购物车功能
2017/06/17 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
2014年元旦活动方案
2014/02/15 职场文书
美术毕业生求职信
2014/02/25 职场文书
企业员工培训感言
2014/02/26 职场文书
广告学专业求职信
2014/06/19 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
python实现网络五子棋
2021/04/11 Python