`
j2ee_zhongqi
  • 浏览: 204155 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Dojo之Array处理

    博客分类:
  • Dojo
阅读更多
    Dojo内置了很多Array处理的方法,具体有:dojo.forEach、dojo.map、dojo.some、dojo.every、dojo.filter、dojo.indexOf、dojo.lastIndexOf. 
     另外还有NodeList相关的方法:NodeList.indexOf, NodeList.lastIndexOf, NodeList.forEach, NodeList.every, NodeList.some, NodeList.concat, NodeList.map, NodeList.filter, NodeList.at。

简单的说明如下:
dojo.forEach:顾名思义,就是对Array里的每个元素依次进行特定的操作,这个操作也叫做回调函数。

           形式如下:dojo.forEach(items, function(item, i, refItems){// do something});

           其中,items就是想要进行处理的Array变量,forEach的第二个参数是一个匿名函数,forEach会传三个参数进去,参数名可以自定,item是每次进行处理的Array中的一个元素;i是正在处理的这个元素的index;refItems是items的一个引用,如果在匿名函数里使用这个引用的话,需要注意的是,改变这个引用的话,items也会被改变。

           按照官网上的说法,如果仅仅是这样简单的循环的话,那它就不值得人兴奋了。如果配合其他dojo的function进行使用的话,特别是dojo.query方法,那forEach就变得不一般了,看下面这个例子:

                dojo.forEach(dojo.query("select"), function(selectTag){selectTag.disabled = true});

           这句代码会把两个页面内的选择框都设置为无效。不需要跟dom api打交道,也不需要使用令人烦躁的id和name,简单有效。

           一般来说,在dojo.query的结果上进行forEach的调用更符合人的理解方式,于是dojo也提供了这样一种更有逻辑性的调用方法:

                dojo.query("select").forEach(function(selectTag){selectTag.disabled = true});

           从1.0版本开始,达到上面代码同样效果有了更新潮的写法,可以完全抛开匿名的function:

                 dojo.query("select").forEach("item.disabled = true");

           惟一有所限制的是必须使用item这个名字进行操作。




   dojo.map:用法与dojo.forEach类似,设置一个回调函数,然后对每个Array元素调用这个函数。不同之处有两点:

             1. dojo.map会返回一个处理后的Array;

             2. dojo.map的回调函数需要返回一个值,作为dojo.map返回的Array中的一个元素。

            因为JavaScript中的对象都是引用,所以如果对原始的Array中的元素进行修改了的话,那原始Array也将会被修改(但ms在新版本dojo中已经修正了这个问题,虽然不知道是哪个版本开始的。)但保险起见,可以使用dojo.clone方法复制出一个新的Array进行操作,以达到保护原始Array类的作用。



    dojo.some:这个函数理解起来很容易, 它设定一个回调函数,对Array中的元素进行判断,如果有返回true的元素,dojo.some就返回true,否则就返回false。



    dojo.every:与dojo.some类似,不同的是回调函数对每个元素都返回true的时候,dojo.every才会返回true,否则返回false。



    dojo.filter:用于Array元素的过滤,返回值为过滤后的Array,里面包含的元素是回调函数返回值为true的元素。



    dojo.indexOf:返回元素在Array中的index值,如果没有这个元素的话就返回-1。如:dojo.indexOf(array,element)。如果Array中有两个元素相等,则返回先找到的那个元素的index。



    dojo.lastIndexOf:同dojo.indexOf,不过返回的是找到的最后一个元素的index值。如果有三个元素相等,那就没办法了!!!


一些实例:
1、元素定位

dojo.indexOf(array,value)

dojo.lastIndexOf(array,value)

功能:返回 value 在 array 中的位置,如果没有找到则返回-1

下面是例子:

dojo.indexOf(["a", "b", "c","a", "b", "c"], "c")
 

dojo.lastIndexOf(["a", "b", "c","a", "b", "c"], "c")




2、枚举

dojo.forEach(array,callback)

或者

array.forEach(callback)

返回值:无

功能:用 callback 函数处理 array 中的每一个元素

例子,枚举出Dojo系列的最新文章
function test_forEach(){
    var arr=dojo.query("li","RecentPosts");
    dojo.forEach(arr, function(item, i){
        var li = dojo.doc.createElement("li");
        li.innerHTML = i+1+"_ "+item.innerHTML;
        dojo.byId("result_forEach").appendChild(li);
    });
}

3、枚举并返回数组

dojo.map(array,callback)

或者

array.map(callback)

功能:用 callback 函数处理 array 中的每一个元素,并存进另外一个 array 中

返回值:返回处理后的得到的 array

例子:现有一个数组 [200, 300, 1500, 4500],将它每个元素增加10%
function test_map(){
    var arr = [200, 300, 1500, 4500];
    var afterMap = dojo.map(arr, function(item){
        return item+(item/100)*10;
    });

    dojo.forEach(afterMap, function(item, i){
        var li = dojo.doc.createElement("li");
        li.innerHTML = i+1+". New: "+item;
        dojo.byId("result_map").appendChild(li);
    });
}

4、条件过滤

dojo.filter(arr,callback)

功能:用 callback 函数处理 array 中的每一个元素,将符合条件的元素存进返回数组中,并返回

返回值:数组

例子,把下面数组中 price 大于 30 的元素找出来

[ {price:10,name:"苹果"}, {price:20,name:"肉"}, {price:30,name:"油"}, {price:40,name:"汽车"}, {price:70,name:"杭州"}]
function test_filter(){
    var arr = [
        {price:10,name:"苹果"},
        {price:20,name:"肉"},
        {price:30,name:"油"},
        {price:40,name:"汽车"},
        {price:70,name:"杭州"},
    ];
    var filteredArr = dojo.filter(arr, function(item){
        return (item.price>30);
    });

    dojo.forEach(filteredArr, function(item, i){
        var li = dojo.doc.createElement("li");
        li.innerHTML = i+1+". "+item.name;
        dojo.byId("result_filter").appendChild(li);
    });
}

5、至少有一个

dojo.some(array,callback)

功能:用 callback 函数处理 array 中的每一个元素,如果存在一个以上符合条件的元素则返回 true ,否则返回 false

例子:[10, 20, 30, 90]是否有大于50的元素
function test_some(){
    var res=dojo.some(
    [10, 20, 30, 90],
    function(item){
        return item>50
    });
    alert(res);
}

6、全部都

dojo.every(array,callback)

功能:用 callback 函数处理 array 中的每一个元素,所有元素都符合条件才返回 true ,否则返回 false

例子:把上面例子中的 some 改成 every ,结果就不一样了
function test_every(){
    var res=dojo.every(
    [10, 20, 30, 90],
    function(item){
        return item>50
    });
    alert(res);
}

http://www.pin5i.com/showtopic-24134.html
分享到:
评论

相关推荐

    Dojo的Array处理

    dojo的Array处理

    精通Dojo by Dojo之父

    鉴于此,图灵公司引进了Dojo之父亲自撰写的《Mastering Dojo》一书。 本书对Dojo进行了全面而深入地阐述,包括基本使用和高级技巧。全书以一个能让读者迅速上手的简单示例开篇,进而读者们将了解到Dojo的核心,也...

    DOJO 学习笔记 dojo

    dojo.lang.array & dojo.lang.func & dojo.string.extras) 13 六、 Dojo学习笔记(6. dojo.io.IO & dojo.io.BrowserIO) 18 七、 Dojo学习笔记(7. dojo.dom) 22 八、 Dojo学习笔记(8. dojo.event & dojo.event.topic ...

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    dojo文档 dojo文档 dojo文档

    dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档

    dojo事件处理框架

    Dojo的Event System以类似于AOP的advice机制的风格,来为DOM事件和任何的方法提供统一的事件处理框架,而不会给使用大多数简单的DOM事件机制的开发者带来额外的学习和开发负担。

    dojo精品中文教程(包一)

    dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo 工具包和 JSON-RPC 构建...

    dojo精品中文教程(全)

    dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo 工具包和 JSON-RPC 构建...

    dojo js dojo js

    dojo js dojo js dojo js dojo js dojo js dojo js dojo js

    dojo精品中文教程(包二)

    dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo 工具包和 JSON-RPC 构建...

    DOJO中文手册【出自dojo中国】

    DOJO中文手册【出自dojo中国】 页数60+ 简单介绍: Dojo 是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)), 这也是为什么叫它a \"unified\" toolkit的...

    Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库

    dojo.js.核心jsDojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库

    javascript dojo

    学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源...

    dojo相关详细资料

    dojo资料dojo资料dojo资料dojo资料dojo资料

    dojo中文文档-dojo手册

    dojo中文文档下载。dojo中文文档下载。

    Dojo之Widget标签开发 - 我为人人,人人为我 - BlogJava

    Dojo之Widget标签开发 - 我为人人,人人为我 - BlogJava

    精通Dojo 中文版PDF版(高清)

    深刻剖析Dojo工作原理,Dojo之父执笔的权威之作,国内权威社区DOJO中国组织翻译。 Doio是一个功能强大的面向对象开源JavaScript工具包,它为开发新一代Web程序提供了一套完整的小部件和一些特效,得到了IBM、Sun、...

    dojo笔记dojo笔记dojo笔记

    dojo笔记dojo笔记dojo笔记dojo笔记dojo笔记dojo笔记dojo笔记dojo笔记dojo笔记dojo笔记dojo笔记

    dojo教程 dojo 教程大全

    精通Dojo(中文版),之前自己学习的时候看的,质量挺高,百度网盘地址

    dojo中文文档

    dojo中文文档dojo中文文档

Global site tag (gtag.js) - Google Analytics