`
j2ee_zhongqi
  • 浏览: 209569 次
  • 性别: 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 是一个强大的JavaScript工具库,它为开发者提供了丰富的功能,包括对Array对象的处理。在Dojo中,数组操作是一大亮点,因为它们提供了一系列高效且易用的方法,使得处理数组变得更加便捷。 首先,`dojo....

    dojo开发文档

    1. **Dojo核心模块**:Dojo的核心模块包括`dojo/_base`系列,如`dojo/_base/lang`用于语言扩展,`dojo/_base/array`提供数组操作方法,`dojo/_base/event`管理事件处理。了解这些基础模块,能帮助开发者更好地理解和...

    dojo-release-1.0.2

    8. **工具集**:还包括日期和时间处理、字符串格式化、数组操作等一系列实用工具函数,如`dojo/date`、`dojo/regexp`和`dojo/_base/array`。 在"dojo-release-1.0.2"这个特定版本中,可能包含以下内容: - **源...

    dojo1.6关于DOM相关操作的官方介绍

    2. **dojo.NodeList**: dojo.query返回的是一个dojo.NodeList对象,它扩展了Array原型,提供了许多便利的方法,如`forEach`、`filter`、`map`等,使得遍历和操作DOM节点变得更加简单。此外,NodeList还支持样式操作...

    dojo源码

    10. Dojo工具和辅助函数:`dojo/_base/lang`、`dojo/_base/array`等模块提供了一系列实用的工具函数,如类型检测、数组操作、字符串处理等,极大地提高了开发效率。 通过分析和学习Dojo源码,我们可以深入了解...

    dojo与json应用

    ### Dojo与JSON应用详解 #### 一、概述 ...通过以上介绍,我们可以看到Dojo结合自定义的Taglib在处理JSON数据方面提供了非常便捷的方法。开发者可以根据实际需求灵活运用这些标签,实现高效的数据展示和处理。

    dojo Grid例子

    2. **数据绑定**:Dojo Grid可以与各种数据源绑定,包括JSON、XML、Array等。在提供的例子中,你可以看到如何将Grid与不同格式的数据源连接,如从本地JSON文件加载数据,或者从服务器获取数据。 3. **异步数据加载*...

    dojo utils tools with datas

    Dojo Toolkit中的Utils模块是其核心组件之一,它包含了许多辅助函数和类,帮助开发者更高效地处理DOM操作、事件管理、动画效果以及数据绑定等任务。 在"dojo utils tools with data source sample java and ...

    dojo类机制实现原理分析

    if (typeof superclass === "object" && superclass instanceof Array) { bases = c3mro(superclass, className); // C3算法处理 mixins = bases.length - bases[0]; superclass = bases[mixins]; } // 构建...

    Dojo 1.9 modules

    通过上述内容,我们可以了解到Dojo 1.9 Modules中`dojo/_base/array`模块所提供的核心功能,包括`indexOf`、`lastIndexOf`和`forEach`等数组处理方法。这些方法不仅增强了数组的操作能力,还提供了更好的跨浏览器...

    Dojo快速入门教程

    require(["dojo/dom", "dojo/on", "dojo/query", "dojo/_base/window", "dojo/_base/array", "dojo/_base/connect", "dojo/_base/kernel", "dojo/dom-style", "dojo/dom-class", "dojo/dom-construct", "dojo/dom-...

    dojo命令和nodeList的详细介绍

    Dojo命令是Dojo库中的一部分,用于执行特定任务,比如选择和操作DOM元素、处理事件、数据绑定等。这些命令通常通过dojo对象或其子对象来调用,例如`dojo.query()`用于选择DOM元素,`dojo.connect()`用于事件绑定,`...

    dojo基础知识

    在事件处理方面,Dojo通过`dojo.on`函数实现了事件绑定,通过`dojo.topic`和`dojo.subscribe`提供了主题订阅和发布机制,从而实现了事件的解耦和灵活处理。这种事件驱动的编程模型增强了应用程序的交互性和响应能力...

    dojo学习笔记

    - **语法**:`dojo.forEach(array, function(item){ /* 处理每个item */ });` 6. **dojo.connect**: - **用途**:用于连接事件处理器到一个元素或对象。 - **语法**:`dojo.connect(element, eventName, ...

    dojo与json应用说明.pdf

    总结起来,《dojo与json应用说明》深入浅出地介绍了如何在Dojo框架中利用JSON进行数据交换和处理,通过自定义的Taglib简化了开发过程,并提供了具体的示例帮助理解。对于那些在教育领域使用Dojo开发Web应用的教师和...

    四种流行的AJAX框架jQuery_Mootools_Dojo_ExtJS的对比

    - **底层类修改**: 对Array、String等基础类进行了修改,这与jQuery的设计理念不同。 - **DOM操作不如jQuery**: 在DOM操作和CSSSelector方面不如jQuery强大。 #### 三、Dojo **主页**: **优点**: - **强大的企业...

    oop-java-dynamic-array-mogyorosibalin:oop-java-dynamic-array-mogyorosibalin由GitHub Classroom创建

    本项目“oop-java-dynamic-array-mogyorosibalin”是一个实践平台,旨在帮助学习者熟悉Java中的动态数组实现,通过Dojo练习来确保所有的测试用例都能顺利通过。下面将详细讨论动态数组的概念、实现以及相关的Java...

    ajax框架源码

    Dojo 是一个全面的JavaScript框架,包含了大量的模块和工具,不仅涵盖了Ajax,还包括了DOM操作、事件处理、动画、数据存储、图表绘制等功能。Dojo 的亮点在于: 1. **模块化**:Dojo 使用AMD(Asynchronous Module ...

Global site tag (gtag.js) - Google Analytics