js數組中foEach和map的用法詳解 jq中的$.each和$.map
阿新 • • 發佈:2018-03-07
cnblogs arr 對象 cal for index source asc 原生js
數組中foEach和map的用法詳解
相同點:
1.都是循環遍歷數組(僅僅是數組)中的每一項。
2.forEach() 和 map() 裏面每一次執行匿名函數都支持3個參數:數組中的當前項value,當前項的索引index,原始數組array。
3.匿名函數中的this都是指Window。
4.IE6-8不兼容,通過在數組原型上擴展此方法可以實現
形式:
[].forEach(function(value,inede,array) {
//...
});
[].map(function(value,inede,array) {
//...
});
Array.prototype.myForEach = function myForEach(callback,context){
context = context || window;
if(‘forEach‘ in Array.prototye) {
this.forEach(callback,context);
return;
}
//IE6-8下自己編寫回調函數執行的邏輯
for(var i = 0,len = this.length; i < len;i++) {
callback && callback .call(context,this[i],i,this);
}
}
forEach():
參數:value數組中的當前項, index當前項的索引, array原始數組;
數組中有幾項,那麽傳遞進去的匿名回調函數就需要執行幾次。
無返回值,僅僅是遍歷數組中的每一項,不對原來數組進行修改;但是可以自己通過數組的索引來修改原來的數組;
var data = [1,23,45,56,7,8];
data.forEach(function(value,index,arr) {
arr[index] = arr[index]*10;
});
map():
有返回值,可以return出來。
參數:value數組中的當前項,index當前項的索引,array原始數組;
區別:map的回調函數中支持return返回值;相當於把數組中的每一項改變(並不影響原來的數組,只是相當於把原數組克隆一份,把克隆的這一份的數組中的對應項改變了);
var data = [10,230,450,560,70,80];
var data1 = data.map(function(value,index,arr) {
return value/10;
});
console.log(data);
console.log(data1);
//(6) [10, 230, 450, 560, 70, 80]
//(6) [1, 23, 45, 56, 7, 8]
jQuery中的$.each和$.map
相比於原生js功能有了擴展,可以遍歷對象。
形式:
$.each(obj,function(index,value) {
//...
});
$.map(obj,function(index,value) {
//...
});
$.each()
沒有返回值。$.each()裏面的匿名函數支持2個參數:當前項的索引i,數組中的當前項v。如果遍歷的是對象,k 是鍵,v 是值。
$.each( { name: "assassin", age: 23 }, function(k, v){
console.log( "Key: " + k + ", Value: " + v );
});
/*
Key: name, Value: assassin
Key: age, Value: 23
*/
$.map()
有返回值,可以return 出來。$.map()裏面的匿名函數支持2個參數和$.each()裏的參數位置相反:數組中的當前項v,當前項的索引i。如果遍歷的是對象,k 是鍵,v 是值。
$.map( { name: "assassin", age: 23 }, function(k, v){
console.log( "Key: " + k + ", Value: " + v );
});
//Key: assassin, Value: name
//Key: 23, Value: age
js數組中foEach和map的用法詳解 jq中的$.each和$.map