- 浏览: 686308 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
英文地址:http://dojotoolkit.org/documentation/tutorials/1.7/arrays/
难度:初级
Dojo的版本:1.7
在本教程中,您将了解使用JavaScript数组: dojo/_base/array 的Dojo的跨平台解决方案。
入门
在建立你的web应用时,数据访问和操纵是一个非常重要的方面。 JavaScript的开发者知道这一点所以增加了数组的一些方法,以便更容易地处理数据。 可悲的是,并不是所有的浏览器和环境都采用这些新方法。 好消息是,Dojo提供了新新的阵列的辅助方法,所以无论你在什么环境,你都能够很容易地使用数组。
搜索
一个操作数组的常用功能是找到一个数组中内的一个元素。 Dojo提供了两个函数: dojo/_base/array模块中的 indexOf lastIndexOf。indexOf是通过一个数组从最低到最高下标的搜索,lastIndexOf是从最高到最低搜索。 都采取相同的参数:一个数组,要搜索的元素,从开始的下标。 让我们来看看一些例子:
require(["dojo/_base/array"], function(baseArray) { var arr1 = [1,2,3,4,3,2,1,2,3,4,3,2,1]; baseArray.indexOf(arr1, 2); // returns 1 baseArray.indexOf(arr1, 2, 2); // returns 5 baseArray.lastIndexOf(arr1, 2); // returns 11 });
如果要搜索的元素没有被发现,这两个函数将返回-1 。 内部有一件事要注意的是,这两个函数使用进行严格比较( === ),所以要注意搜索的值:
var obj1 = { id: 1 }, arr2 = [{ id: 0 }, obj1, { id: 2 }, { id: 3 }]; // This search returns 1, as obj1 is the second item // in the array. baseArray.indexOf(arr2, obj1); // This search returns -1. While the objects may look similar, // they are entirely different objects, and so this object // isn't found in the array. baseArray.indexOf(arr2, { id: 1 });
循环
另一个频繁的操作是循环数组。 通常情况下,这是与以下类似:
var item; for(var i = 0; i < arr.length; i++){ item = arr[i]; // do something with item }
设置这样循环的一个缺点是,如果您在事件处理程序访问item,它不会是你期望的元素,而是将数组的最后一个元素。 forEach方法为我们提供了一种标准的循环,同时也保留元素,以便在在范围链中查找。 它符合Array.prototype.forEach,但有两个例外:
- 它会遍历未分配的下标。 这意味着,如果你有一个未定义的值在您的数组中,它仍然会执行该指数的功能,而不是只跳过。
- 循环是做了数组本身。 如果使用本地的forEach方法,它遍历数组的一个副本,而不是该数组本身。 这意味着您在基础数组的任何更改都是可见的。
让我们来看看一个例子:
var arr = ["one", "two", "three", "four"], // dom is from dojo/dom list1 = dom.byId("list1"); // Skip over index 4, leaving it undefined arr[5] = "six"; baseArray.forEach(arr, function(item, index){ // This function is called for every item in the array if(index == 3){ // this changes the original array, // which changes the item passed to // the sixth invocation of this function arr[5] = "seven"; } // domConstruct is available at dojo/dom-construct domConstruct.create("li", { innerHTML: item + " (" + index + ")" }, list1); });
baseArray.forEach方法接受3个参数:要遍历的数组,回调函数(包括如上所述之间分配的,未分配的下标),和一个可选的对象使用的范围。
回调函数会传入当前元素对象,当前的下标。 第三个参数是baseArray.forEach范围 ,如果不提供第三个参数则指全局对象( window在浏览器的情况下)。 让我们来看看在范围参数:
var list2 = dom.byId("list2"), myObject = { prefix: "ITEM: ", formatItem: function(item, index){ return this.prefix + item + " (" + index + ")"; }, outputItems: function(arr, node){ baseArray.forEach(arr, function(item, index){ domConstruct.create("li", { innerHTML: this.formatItem(item, index) }, node); }, this); } }; myObject.outputItems(arr, list2);
这是可能的范围参数中最常用的模式之一:通过this可以在相同的范围内调用回调函数。 这种模式是非常有用的。
操纵
dojo使循环很容易,但往往你会想取得一个数组中的数据,做了一些操作,结果你发现做的操作是作用于一个新的数组中。 比方说,我们有一个字符串数组,我们要与他们的值转换为为对象。 鉴于我们所知道的,我们可能会做一些类似这样的:
var original = ["one", "two", "three", "four", "five"], transformed = []; baseArray.forEach(original, function(item, index){ transformed.push({ id: index * 100, text: item }); }); // [ { id: 0, text: "one" }, { id: 100, text: "two" }, ... ]
这不是一个好的解决方案,但它也可以在新版本的JavaScript处理。其中Dojo有: baseArray.map的东西。 让我们一起来看看:
var mapped = baseArray.map(original, function(item, index){ return { id: index * 100, text: item }; }); // [ { id: 0, text: "one" }, { id: 100, text: "two" }, ... ]
map的参数与forEach是一样 。 不同的是,回调的返回值将存储一个新的阵列。
另一个常见的功能是filter 。 filter背后的想法是,你有一个数组,你可能只想基于某种条件选择出它的某些元素。 这可以使用forEach foreach ,但使用的filter有助于大大简化。
map参数不改变,但filter的返回值已经进行了判断,如果它是truthy,该项目被追加到filter返回的数组。 让我们来看看另一个例子:
var filtered = baseArray.filter(mapped, function(item, index){ return item.id > 50 && item.id < 350; }); // [ { id: 100, text: "two" }, { id: 200, text: "three" }, // { id: 300, text: "four" } ]
匹配
有时候你会想知道,如果一个数组中的元素是否符合一定条件:也许你想知道如果某些对象是否有一个错误信息,或者你想确保所有对象都具有一个文本属性。 这里可以使用some方法了。 every 函数的使用与filter一模一样 (包括回调应该返回什么),但不是返回一个数组,而是返回一个布尔值: every将判断数组中的每一个元素是否符合条件,如果都符合返回true, 对于some来说将判断数组中至少有一个元素符合条件。 下面的例子中,应明确这一点:
var arr1 = [1,2,3,4,5], arr2 = [1,1,1,1,1]; baseArray.every(arr1, function(item){ return item == 1; }); // returns false baseArray.some(arr1, function(item){ return item == 1; }); // returns true baseArray.every(arr2, function(item){ return item == 1; }); // returns true baseArray.some(arr2, function(item){ return item == 1; }); // returns true baseArray.every(arr2, function(item){ return item == 2; }); // returns false baseArray.some(arr2, function(item){ return item == 2; }); // returns false
判断这两个函数的一个简单的方法是, every一样使用&&运算符和if语句,而some喜欢使用||运算符
结论
JavaScript规范已给了我们不少强大的阵列的方法,但不是所有的浏览器和环境支持他们。 Dojo的dojo/_base/array模块可以兼容新的和旧的阵列方法之间的差距,让你可以快速有效地用更少的代码做更多的事。
发表评论
-
dojo封装dialog提示框
2012-06-20 10:20 5636/** * 显示dojo的弹出框.前提是已经引用了相 ... -
dojo封装表单ajax提交
2012-06-20 10:16 1709/** * dojo的ajax提交form(post ... -
封装创建dojo的dialog
2012-06-18 13:55 0/** * 显示dojo的弹出框.前提是已经引用了相 ... -
自定义封装dojo通用ajax提交表单
2012-06-18 13:52 2647/** * dojo的ajax提交form(post ... -
使用dojo的dialog自定义confirm效果
2012-06-18 13:43 5113/** * 使用dojo dialog模拟confi ... -
dojo 制做非模态窗口dialog
2012-06-16 13:27 4322dojo的dialog效果基本上都是模态的,也就是说,在弹出窗 ... -
dojo1.7的加载方法
2012-06-01 17:16 4259对于dojo1.7来说,最大的变化就是引入了AMD异步加载器。 ... -
不翻译DOJO了
2012-05-16 17:57 1099翻译DOJO的时间并不长。总是感觉把老外的话翻译过来很是生硬, ... -
dojo1.7翻译 Dijit的主题,按钮和文本框(Dijit Themes, Buttons, and Textboxes)
2012-05-03 15:52 2191原文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 动画效果(Animations)
2012-05-02 12:08 2755原文地址:http://dojotoolk ... -
dojo1.7翻译 动态效果(Dojo Effects)
2012-04-27 10:15 1314原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 处理DOM(Dojo DOM Functions)
2012-04-26 15:51 2512原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 ajax跨域请求(Getting Jiggy with JSONP)
2012-04-25 12:02 3154原文地址:http://dojotoolk ... -
dojo1.7翻译 ajax功能(Ajax with Dojo)
2012-04-24 15:04 1563原文地址:http://dojotoolk ... -
dojo1.7翻译 搜索节点功能(Using dojo/query)
2012-04-23 15:32 1886原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 hello,dojo
2012-04-22 15:21 2140原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义类(Classy JavaScript with dojo/_base/declare)
2012-04-20 15:34 2536原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义模块(Defining Modules)
2012-04-18 17:21 6836原文地址:http://dojotoolkit ... -
dojo1.7翻译 通过dojoConfig来配置dojo
2012-04-18 09:20 5207原文地址:http://dojotoolk ... -
dojo1.7翻译 Hello,World
2012-04-17 10:17 1595原文地址:http://dojotoolkit.org/ref ...
相关推荐
Dojo 是一个功能强大的JavaScript工具库,尤其在Web开发领域,它提供了一系列高级功能,包括模块化、数据管理、用户界面构建以及Ajax交互等。Dojo 1.7 API CHM文件是针对这个版本的官方文档,以帮助开发者理解和利用...
【Dojo 1.7 知识点详解】 Dojo 1.7 是 Dojo Toolkit 重要的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的主要焦点在于Asynchronous Module Definition (AMD),这是一种优化...
【Dojo 1.7 中文版本注释功能说明】 Dojo 1.7 是一个重大的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的核心亮点是实现了Asynchronous Module Definition (AMD)机制,这是一项...
Dojo 是一个强大的JavaScript工具库,专为构建高性能...无论是对于前端开发新手还是有经验的开发者,Dojo 1.7都是一个值得深入研究的工具集。通过实践这些实例,你可以更好地理解Dojo的工作原理,提升你的Web开发技能。
Dojo 是一个强大的JavaScript 库,它为Web 开发提供了丰富的功能和工具,尤其是在构建复杂的、可维护的、高性能的富互联网应用(RIA)时。Dojo 1.7 版本是其历史上的一个重要里程碑,引入了许多改进和优化,包括模块...
《Dojo 1.7 深入解析与应用实践》 Dojo 是一个全面的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计。这个“dojo-release-1.7.1-src”压缩包包含了Dojo 1.7.1的源代码,为开发者提供了深入了解和自定义...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,尤其在构建复杂的、企业级的AJAX应用程序方面表现出色。"dojo-release-1.7.3"是Dojo框架的一个特定版本,发布于2012年,这个版本在1.7系列...
手册中列举了一些常用的Dojo包,如dojo.io用于不同类型的IO传输,dojo.dnd提供拖放功能的API,dojo.string提供了字符串处理方法,dojo.date帮助解析和操作日期,dojo.event处理事件驱动和AOP开发,dojo.back管理撤销...
Dojo 是一个强大的JavaScript工具库,它为开发者提供了丰富的功能,包括对Array对象的处理。在Dojo中,数组操作是一大亮点,因为它们提供了一系列高效且易用的方法,使得处理数组变得更加便捷。 首先,`dojo....
Dojo工具包是一个广泛使用的JavaScript库,主要用于构建交互式的Web应用程序。这个压缩包包含了你在学习Dojo时可能需要用到的各种资源,旨在提供一个完整的开发环境,同时也作为一种备份手段。现在,让我们深入了解...
Dojo 是一个强大的JavaScript工具包,它为富互联网应用程序(RIA)开发提供了丰富的功能和组件。随着RIA的兴起,Dojo成为了JavaScript开发者的首选之一,尤其是对于那些有Java背景的开发者,它提供了一种结构化的、...
dojo1.9使用post方式发送数组,链接数据库,并将返回的数据进行解析。
Dojo 是一个强大的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计。它提供了一整套功能,包括UI组件、数据管理、模块化、动画效果以及与服务器的通信等。在本压缩包中,我们看到的是Dojo的1.7.2版本,这...
在Dojo 1.7及以后的版本中,推荐使用`dojo/on`模块来处理事件。 7. **动画效果**:dojo的`dojo.fx`模块提供了创建复杂动画的能力,包括淡入淡出、滑动、缩放等效果。同时,`dojox.fx`提供了更多的特效和动画组合。 ...
**DOJO工具包简单介绍** Dojo工具包是一款强大的JavaScript库,专为Web开发者提供一套完整的前端解决方案。它集成了丰富的UI组件、数据管理、动画效果、Ajax交互以及国际化等功能,帮助开发者高效地构建高性能、可...
《Dojo入门》这本书主要介绍了Dojo JavaScript库的使用,帮助初学者快速掌握这个强大的前端开发工具。Dojo是一个开源的JavaScript框架,旨在提供一站式的解决方案,包括UI组件、数据管理、动画效果、Ajax交互等功能...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信等多个方面。Dojo的核心在于它的模块化系统,这使得开发者可以按需加载代码,提高应用的性能和可维护...
浅谈Dojo中的DTL工具包
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括AJAX、DOM操作、事件处理、动画效果、模块化编程等。这个"dojo 官方教程 中文翻译"是针对Dojo框架的全面指南,帮助中文用户更好地理解...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和API,包括对DOM(文档对象模型)的操作。在Dojo 1.6版本中,DOM操作是其核心特性之一,它允许开发者高效地创建、修改和管理HTML元素。以下是对...