JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 。这些方法已经被写进了ECMA262 V5。现代浏览器(IE9/Firefox/Safari/Chrome/Opera)都已经支持,但IE6/7/8不支持。jquery的工具方法中提供了类似的功能。

1、Array.forEach()和jquery的$().each()。在数组中的每个项上运行一个函数。

var ary = [2,4,6,8];
 
// js1.6 Array.forEach方法
ary.forEach(function(i){alert(i);});
 
// jquery的写法
$(ary).each(function(){alert(this);});
//还可以写成这样
$(ary).each(function(index,item){alert(item);});//index是元素的索引,item是该元素

2、Array.filter()和jquery的$.grep()。在数组中的每个项上运行一个函数,并将函数返回真值的项作为数组返回。简单的说就是用一个条件过滤掉不符合的数组元素,剩下的符合条件的元素组合成新的数组返回。

var ary = [2,4,6,8];
 
// js1.6 Array.filter()方法
var otherAry1 = ary.filter(function(item){return item>4;});
alert(otherAry1);//输出6,8
 
// jquery写法(注意和$.each的区别)
// 此处函数中第一个参数是数组元素自身,第二个参数是数组元素索引
// 而$().each方法刚好相反,作者应该统一下。
var otherAry2 = $.grep(ary,function(item,index){
     return item>4;
});
alert(otherAry2);//输出6,8

3、Array.map()和jquery的$.map()。在数组中的每个项上运行一个函数,并将全部结果作为数组返回。这个方法非常强大,尤其是作用于DOM数组时(在abcc项目上用过,对每个查询模块DOM生成查询字符串)。简单说就是把每个数组元素运算的结果作为新数组元素(还是很拗口)。

var ary = [2,4,6,8];
 
// js1.6 Array.map()方法
var newAry1 = ary.map(function(item){return item+1;});//每个元素加1
alert(newAry1);//输出3,5,7,9
 
// jquery写法
var newAry2 = $.map(ary,function(item,index){return item+1;});
alert(newAry2);//输出3,5,7,9

4、Array.every()方法。检查数组元素是否都符合某个条件,只要有一个不符合返回false,否则返回true

var ary = [2,4,6,8,10];
 
alert(ary.every(function(item){return item>1}));//true
alert(ary.every(function(item){return item>2}));//false

5、Array.some()方法。检查数组中元素是否符合某个条件,只要有一个符合返回true,否则返回false

var ary = [2,4,,6,8,10];
 
alert(ary.some(function(item){return item>9;}));//true
alert(ary.some(function(item){return item>10;}));//false

最后给出 IE6/7/8的解决方案,让这些浏览器完美支持JS1.6的Array新方法。

  function applyIf(o, c) {
    if(o) {
        for(var p in c) {
            if(o[p]===undefined) {
                o[p] = c[p];
            }
        }
    }
    return o;
}
applyIf(Array.prototype, {
    indexOf : function(obj, idx) {
        var from = idx == null ? 0 : (idx < 0 ? Math.max(0, arr.length + idx) : idx);
        for(var i = from, l = this.length; i < l; i++) {
            if(i in this && this[i] === obj) {
                return i;
            }
        }
        return -1;
    },
    lastIndexOf : function(obj, idx) {
        var len = this.length, from = idx == null ? len - 1 : idx;
        if(from < 0) {
            from = Math.max(0, len + from);
        }
        for(var i = from; i >= 0; i--) {
            if (i in this && this[i] === obj) {
                return i;
            }
        }
        return -1;
    },
    every : function(fn, thisObj) {
        var l = this.length;
        for(var i = 0; i < l; i++) {
            if(i in this && !fn.call(thisObj, this[i], i, this)) {
                return false;
            }
        }
        return true;
    },
    some : function(fn, thisObj) {
        var l = this.length;
        for(var i = 0; i < l; i++) {
            if(i in this && fn.call(thisObj, this[i], i, this)) {
                return true;
            }
        }
        return false;
    },
    filter : function(fn, thisObj) {
        var l = this.length, res = [], resLength = 0;
        for(var i = 0; i < l; i++) {
            if(i in this) {
                var val = this[i];
                if(fn.call(thisObj, val, i, this)) {
                    res[resLength++] = val;
                }
            }
        }
        return res;
    },
    map : function(fn, thisObj) {
        var l = this.length, res = [];
        for(var i = 0; i < l; i++) {
            if(i in this) {
                res[i] = fn.call(thisObj, this[i], i, this);
            }
        }
        return res;
    },
    forEach : function(fn, thisObj) {
        var l = this.length;
        for(var i = 0; i < l; i++) {
            if(i in this) {
                fn.call(thisObj, this[i], i, this);
            }
        }
    }
});

JavaScript1.6数组新特性和JQuery的几个工具方法的更多相关文章

  1. JQuery --- 第一期 (初识jQuery, JQuery核心函数和工具方法)

    个人学习笔记  初识jQuery 1.我的第一个JQuery <!DOCTYPE html> <html lang="en"> <head> & ...

  2. javascript004_ECMA5数组新特性

    •对于ECMAscript5这个版本的Array新特性补充: –位置方法:indexOf      lastIndexOf –迭代方法:every  filter   forEach   some   ...

  3. JavaScript_ECMA5数组新特性

    var arr = [ 1, 2, 3, 4, 5, 4, 3, 2, 1 ]; 新加位置的方法: indexOf lastIndexOf1.1个参数的时候表示传值 返回索引位置(index从0开始) ...

  4. html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题

    一.背景 使用ajax,可以实现不需要刷新整个页面就可以进行局部页面的更新.这样可以开发交互性很强的富客户端程序,减少网络传输的内容.但长期以来存在一个问题,就是无法利用浏览器本身提供的前进和后退按钮 ...

  5. [Android 新特性] 谷歌发布Android Studio开发工具1.0正式版(组图) 2014-12-09 09:35:40

    Android Studio是谷歌于13年I/O大会推出的Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的Androi ...

  6. JQuery $ $.extend(),$.fn和$.fn.extend javaScript对象、DOM对象和jQuery对象及转换 工具方法(utility)

    一.为什么jquery前面要写$ Javascript没有package的概念,而作者又希望所有jQuery相关的API都能通过一个全局性的对象来容纳. 名为jQuery的全局变量就是这样一个对象,不 ...

  7. jQuery源代码 解析一 工具方法

    1. 外层沙箱以及命名空间$ 几乎稍微有点经验前端人员都这么做,为了避免声明了一些全局变量而污染,把代码放在一个"沙箱执行",然后在暴露出命名空间(可以为API,函数,对象): 2 ...

  8. jQuery晦涩的底层工具方法们

    这里整理的是jQuery源码中一些比较晦涩难懂的.内部的.最底层的工具方法,它们多为jQuery的上层api方法服务,目前包括: jQuery.access jQuery.access: functi ...

  9. es6数组新特性

    1.Array.from 从类数组和可遍历对象中创建Array的实例 类数组对象包括:函数中的arguments.由document.getElementsByTagName()返回的nodeList ...

随机推荐

  1. 关于InfiniBand几个基本知识点解释

    文章出处: https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/83629279 公众号 https://blog.csdn.net/ ...

  2. cloudflare 加https、加SSL(加CF处理)实操流程

    建站过程中,少不了SSL证书等cf添加操作,cf,即cloudflare的简写 首先,点击如图“Add site”,弹出输入框后,填写已在如阿里云.goDaddy.freedom等域名平台购买的域名: ...

  3. React Native 'config.h' file not found 问题、 'glog/logging.h' file not found 问题、configure: error: C compiler cannot create executables问题解决过程记录

    1.在github 上面 git clone 一个RN 项目代码,npm install (yarn)后,准备运行iOS工程,发现'config.h' file not found ,恶心!!! 百度 ...

  4. Daily Scrum NO.3

    工作概况 符美潇(PM) 昨日完成的工作 1.Daily Scrum.日常会议及日常工作的分配和查收. 2.整合各DEV所写的代码,在TFS上进行Beta阶段第一次代码签入. 今日工作 1.Daily ...

  5. X86主要的几种寻址方式

    一.首先 P33: 严格来说有三种寻址方式 与数据有关的寻址方式 与转移指令或过程调用指令有关的寻址方式 与IO指令有关的寻址方式 这篇博客只讲1.2两条 二.然后 1. 与数据有关的寻址方式 数据, ...

  6. oracle (+) 什么意思

    oracle中的(+)是一种特殊的用法,(+)表示外连接,并且总是放在非主表的一方. 例如左外连接:select A.a,B.a from A LEFT JOIN B ON A.b=B.b;等价于se ...

  7. 第二次spring冲刺第2天

    今天我们开了个小会,关于讨论开始页面的设计及数据输入的格式限制.运算功能等改善

  8. CentOS 安装 Harbor的简单过程(仅使用http 未使用https)

    1. 下载离线安装包 在线安装 99% 会失败, 建议还是使用离线安装包 下载地址 https://github.com/vmware/harbor/releases 20180719 时最新版本的g ...

  9. 使用navicat 链接数据库时乱码

    在建立数据库链接时设置  高级->编码->uft-8 其他版本使用下面方法

  10. java的类属性默认有this 但容易与参数重名 所以需要显性的加上this 以分区别