JavaScript 5 新增 Array 方法实现介绍

 更新时间:2012年02月06日 11:42:29   作者:  
JavaScript 5 发布有一段时间了,Array 对象新增了很多方法。但在老版本的浏览器上还不能使用,得益于 JavaScript 的动态可扩展性,我实现了这些方法,在此晒出来与君共勉
复制代码 代码如下:

/*!
* 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的一些知识以及循环详解

    下面小编就为大家带来一篇关于javascript的一些知识以及循环详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • JS选项卡动态替换banner图片路径的方法

    JS选项卡动态替换banner图片路径的方法

    这篇文章主要介绍了JS选项卡动态替换banner图片路径的方法,涉及javascript操作文件css样式的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • js 取时间差去掉周六周日实现代码

    js 取时间差去掉周六周日实现代码

    js 求时间差在生活中经常会触及到,本文整理了一些,希望可以帮助有需求的朋友可以,而起还可以实现去掉周六周日这些东东,废话不多说,进入正题
    2012-12-12
  • JavaScript中arguments和this对象用法分析

    JavaScript中arguments和this对象用法分析

    这篇文章主要介绍了JavaScript中arguments和this对象用法,结合实例形式较为详细的分析了arguments对象和this对象的功能、常见用法及相关操作注意事项,需要的朋友可以参考下
    2018-08-08
  • 跨域表单提交状态的变相判断代码

    跨域表单提交状态的变相判断代码

    通过表单在iframe内向一个跨域的url提交的时候,如何判断提交成功了呢?这个,基本上,很难,因为浏览器安全沙箱的限制,我们没有办法通过获得iframe内部不同域页面的信息。
    2009-11-11
  • D3.js实现饼图,环图,玫瑰图的绘制

    D3.js实现饼图,环图,玫瑰图的绘制

    这篇文章主要为大家介绍了如何利用D3.js中的d3.pie和d3.arc实现饼图、环图和玫瑰图的绘制,文中的实现方法讲解详细,感兴趣的可以尝试一下
    2022-11-11
  • JavaScript 滚轮事件使用说明

    JavaScript 滚轮事件使用说明

    用过 Google 地图的人可能都很熟悉,通过滚动滚轮可以对地图进行缩放,非常地方便。适当地使用滚轮事件可以带来不错的用户体验。
    2010-03-03
  • 给easyui的datebox控件添加清空按钮的实现方法

    给easyui的datebox控件添加清空按钮的实现方法

    下面小编就为大家带来一篇给easyui的datebox控件添加清空按钮的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Bootstrap 3 按钮标签实例代码

    Bootstrap 3 按钮标签实例代码

    这篇文章主要介绍了Bootstrap 3 按钮标签实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • 全解跨域请求问题处理方法及分析

    全解跨域请求问题处理方法及分析

    这篇文章主要为大家介绍了全解跨域请求问题处理方法及分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-07-07

最新评论