dojo:array

        在网页开发中,对数据的访问的操作是很重要的,javascript也提供了一些数组方法来处理数组类型的数据,但是并不是所有浏览器都支持这些方法。dojo提供了一些关于数组的方法,并且在浏览器兼容性、运行环境的支持方面都比较好。

        dojo/_base/array是对javascript v1.6的扩展,对原生的数组函数进行了增强,使得原本在某个浏览器或某种环境下不能使用的数组方法变得可用。在dojo2.0中,这个模块看起来像是在javascript数组方法的实现底层又加了一层,增强了对浏览器的兼容性。

       用法

        和其它dojo/_base模块中的其他模块一样,如果以传统的方法(async:false)运行dojo加载器,这个模块会自动加载。即使自动加载了这个模块也要使用require来使用它。

require(["dojo/_base/array"], function(array){
  // array contains the features
});
 



       方法

indexOf()

利用IndexOf()确定一个元素在数组中的索引。返回数组中与参数值相等的第一个元素的索引,如果没有找到相等的值返回-1.

require(["dojo/_base/array"], function(array){
  array.indexOf(arrayObject, valueToFind, fromIndex, findLast);
});

javascript中与它对应的方法是Array.indexOf,但是有两个不同之处:

  1. 对稀疏数组(sparse array:指数组中大部分的值都未被使用或都为0,仅有少部分的空间被使用,存在一定的内存空间浪费现象)操作时,dojo函数为每个索引调用回调函数,而在javascript1.6中的indexOf函数会跳过稀疏数组中未被使用的部分(hole);
  2. 使用==而非===判断是否相等。

参数:indexOf(arr,value,fromIndex,findLast)

  • arr:Array类型参数;
  • value:对象类型参数;
  • fromIndex:整型可选参数;
  • findLast:布尔类型参数,可选,如果为true,类似于lastIndexOf()。
require(["dojo/_base/array", "dojo/dom", "dojo/dom-construct", "dojo/on", "dojo/domReady!"],
function(array, dom, domConst, on){

  var arrIndxOf = ["foo", "hoo", "zoo"];

  on(dom.byId("refButton1"), "click", function(){
    var position = array.indexOf(arrIndxOf, "zoo");
    domConst.place(
      "<p>The index of the word 'zoo' within the array is " + position + "</p>",
      "result1",
      "after"
    );
  });

});


 

every(arr,callback,thisObject)

确定数组中的每个元素是否都满足回调函数的条件,如果都满足返回true,只要有一个不满足就返回false。对应javascript v1.6中的Array.every()方法。有一个不同之处 :对稀疏数组操作时,将数组中未被使用的值以undefined值传递给回调函数,而在javascript1.6中的indexOf函数会跳过稀疏数组中未被使用的部分(hole)。

require(["dojo/_base/array"], function(array){
  array.every(arrayObject, callback, thisObject);
});

如果要使用循环进行比较判断,使用every()的效率要比forEach()高。

参数:

  • arr:类型为数组或字符串;
  • callback:函数或字符串,带有三个参数(item, index, array)和返回值(true,如果条件满足)的回调函数;
  • thisObject:对象类型,可选,可用于限定调用回调函数的作用域。

例如:

// returns false

array.every([1, 2, 3, 4], function(item){ return item>1; });


 

<span class="content"><span style="margin-left: 0px !important;" class="block"><code class="comments">// returns true</code></span></span><div class="line alt2"><span class="content"><span style="margin-left: 0px !important;" class="block"><code class="plain">array.every([1, 2, 3, 4], </code><code class="keyword">function</code><code class="plain">(item){ </code><code class="keyword">return</code> <code class="plain">item>0; });</code></span></span></div>

filter(arr,callback,thisObject)


返回一个新的数组,数组中的元素是arr中满足回调函数callback条件的元素。对应javascript v1.6中的filter方法,有一个不同之处:对稀疏数组操作时,将数组中未被使用的值以undefined值传递给回调函数,而在javascript1.6中的indexOf函数会跳过稀疏数组中未被使用的部分(hole)。

require(["dojo/_base/array"], function(array){
  filteredArray = array.filter(unfilteredArray, callback, thisObject);
});

forEach(arr,callback,thisObject)

对于arr中的每个元素,都执行callback函数,忽略返回值。如果要中断循环,可以使用array.every()或array.some()。forEach不会中断arr中对元素的循环。这个函数对应与Javascript v1.6的forEach()数组方法。有一个不同之处:对稀疏数组操作时,将数组中未被使用的值以undefined值传递给回调函数,而在javascript1.6中的indexOf函数会跳过稀疏数组中未被使用的部分(hole)。
// log out all members of the array:

array.forEach(

[ "thinger", "blah", "howdy", 10 ],

function(item){

console.log(item);

}

);


 map(arr,callback,thisObject,Ctr)

对arr中的每个元素都执行callback函数(对元素进行操作),将处理结果组成一个数组返回,对应javascript v1.6的Array.map()方法。有一个不同之处:对稀疏数组操作时,将数组中未被使用的值以undefined值传递给回调函数,而在javascript1.6中的indexOf函数会跳过稀疏数组中未被使用的部分(hole)。
// returns [2, 3, 4, 5]

array.map([1, 2, 3, 4], function(item){ return item+1 });

some(arr,callback,thisObject)

确定arr中是否有一些元素满足callback函数的条件。对应javascript v1.6的Array.some()方法。有一个不同之处:对稀疏数组操作时,将数组中未被使用的值以undefined值传递给回调函数,而在javascript1.6中的indexOf函数会跳过稀疏数组中未被使用的部分(hole)。

 

// is true

array.some([1, 2, 3, 4], function(item){ return item>1; });

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值