Dojo之Array处理

本文介绍了Dojo库中处理数组的各种内置方法,包括forEach、map、some、every、filter等,并通过实例展示了如何使用这些方法高效地操作数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

[b]简单的说明如下:[/b]
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值。如果有三个元素相等,那就没办法了!!!


[b]一些实例:[/b]
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值