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 Array对象 学习
Jul 19 Javascript
Jquery选择器 $实现原理
Dec 02 Javascript
JavaScript前补零操作实例
Mar 11 Javascript
jquery实现超简洁的TAB选项卡效果代码
Aug 28 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
jQuery文字轮播特效
Feb 12 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 Javascript
JS库之Waypoints的用法详解
Sep 13 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
Mar 08 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 jQuery
vue3.0实现插件封装
Dec 14 Vue.js
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
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
python开发之for循环操作实例详解
2015/11/12 Python
python简单实现刷新智联简历
2016/03/30 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
对pandas中apply函数的用法详解
2018/04/10 Python
带你认识Django
2019/01/15 Python
Python实现括号匹配方法详解
2020/02/10 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
世界上最好的帽子:Tilley
2016/11/27 全球购物
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
护理自我鉴定范文
2013/10/06 职场文书
北体毕业生求职信
2014/02/28 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
服务之星事迹材料
2014/05/03 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
音乐会主持人开场白
2015/05/28 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS