數組中map,forEach和for循環的區別


今天遇到了一點有意思的事情,同事用了map出了點問題,頁面的路由重新進行了加載,所以今天我們說一些map  forEach  for的區別

遍歷 性能上來說 for循環遍歷 < for…of遍歷 < forEach遍歷 < for…in遍歷 < map遍歷
 
1)經典的for循環:
   for(var i = 0; i < arr.length; i++){  }
2)for...in
    for(var i in  arr){  }
3) forEach
    arr.forEach(function(i){   })
4) map
    arr.map(function(i){   })
5) ES6的語法  for...of
    for(let i of arr){   }
 
 
forEach 和map的區別:
相同點:
(1)都是循環遍歷數組中每一項
(2)forEach 和 map方法中每次執行匿名函數都支持3個參數:item(當前每一項的值)  index(索引值)  arr(原數組)
(3)匿名函數中的this都是指向window
(4)只能遍歷數組
(5)都不會改變原數組
 
區別:
map方法:
(1)map方法返回一個新的數組,數組中的元素為原始數組調用函數處理后的值
(2)map方法不會對空的數組進行檢測,map方法不會改變原始數組
(3)chrome、Safari1.5+、opera都支持,IE9+
 
var arr = [0,2,4,6,8];
var str = arr.map(function(item,index,arr){
       console.log(this); //window
       console.log("原數組arr:",arr); //注意這里執行5次
       return item/2; },this);
console.log(str);//[0,1,2,3,4]
若arr為空數組,則map方法返回的也是一個空數組
 
forEach方法
1.forEach方法用來調用數組的每一個元素,將元素傳給回調的函數
2.forEach對於空數組是不會調用回調函數的
var arr = [0,2,4,6,8];
var sum = 0;
var str = arr.forEach(function(item,index,arr){
        sum += item; console.log("sum的值為:",sum); //0 2 6 12 20
        console.log(this); //window
},this)
console.log(sum);//20
console.log(str); //undefined
無論arr是不是空數組,forEach返回的都是undefined。這個方法只是將數組中的每一項作為callback的參數執行一次。
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM