javascript里面的each

JavaScript053

javascript里面的each,第1张

遍历里面的所有Array.prototype.each=function(callback)

{

for (i=0i<this.lengthi++)

{

callback.call(this,this[i])

}

}

var arrayObject=["JavaScript","Prototype","Jquery"]

arrayObject.each(function(x){alert(x)})

代码解释: 用prototype方法给JavaScrip的数组对象Array加一个方法each,each方法传入一个回调函数callback,callback内部根据当前调用数组对象长度循环执行callback方法,callback方法在执行时内部this就指当前调用,并传入一个参数this[i]为数组当前索引对象。上面代码运行时会顺序看到弹出对话框显示"JavaScript","Prototype","Jquery"。

详细出处参考:http://www.pqshow.com/design/Javascript/200909/10369.html对象,

$(".sortrule")是所有class=sortrule的DOM的集合,each是遍历这个集合,每个都执行function的内容

$(this)是当前遍历的单个

如果他的part属性值为sort累计

如果当前遍历对象的value等于desc就改为asc,反之则改为desc

forEach()和map()两个方法都是ECMA5中Array引进的新方法,主要作用是对数组的每个元素执行一次提供的函数,但是它们之间还是有区别的。jQuery也有一个方法$.each(),长得和forEach()有点像,功能也类似。但是从本质上还是有很大的区别的,那么我们探探究竟。

一、forEach和map语法

语法:

//forEach

array.forEach(callback(currentValue, index, array){

//do something

}, this)

//或者

array.forEach(callback(currentValue, index, array){

//do something

})

//map:

var new_array = arr.map(callback[, thisArg]) 

//$.each()

$(selector).each(function(index,element)) //注意参数的顺序

callback: 为数组中每个元素执行的函数,该函数接收三个参数,

参数一:当前数组中元素;参数二:索引; 参数三:当前数组。

this:可选,执行会掉时候,this的指向。

二、区别

2.1、forEach()返回值是undefined,不可以链式调用。

2.2、map()返回一个新数组,原数组不会改变。

2.3、没有办法终止或者跳出forEach()循环,除非抛出异常,所以想执行一个数组是否满足什么条件,返回布尔值,可以用一般的for循环实现,或者用Array.every()或者Array.some()

2.4、$.each()方法规定为每个匹配元素规定运行的函数,可以返回 false 可用于及早停止循环。

三、经典例子

3.1 在使用forEach()时候,如果数组在迭代的视乎被修改,

则其他元素会被跳过。因为 forEach()不会在迭代之前创建数组的副本。

3.2反转字符串

var str = '12345'

Array.prototype.map.call(str, function(x) { //同时利用了call()方法

return x

}).reverse().join('')

3.3一个笔试题。

1

["1", "2", "3"].map(parseInt) //结果 [1, NaN, NaN] 

如果想得到[1, 2,3]应该这么做

function returnInt(element){

return parseInt(element,10)

}

["1", "2", "3"].map(returnInt)

这主要是因为 parseInt()默认有两个参数,第二个参数是进制数。当parsrInt没有传入参数的时候,而map()中的回调函数时候,会给它传三个参数,第二个参数就是索引,明显不正确,所以返回NaN了。

3.4....

四、兼容性

forEach()和map()是ECMA5新引入的,可能在标准的其他实现中不存在,在使用前可以要Ployfill一下。

具体网上很多吧,更多的是在ie9以下,如果你的项目无视这些,那么你可以不care。