關於遍歷一個數組的幾種方法的比較


 <!doctype html>
 <html lang="en">
 <head>
 <title>Document</title>
 </head>
 <body>
      <script>
           var arr=[1,4,56,7,7,8,8,,9,,9,9,,9,9]; var obj={name:"eval",age:23,sex:""}; //只能遍歷索引數組。 for(var j=0,len=arr.length;j<len;j++){ console.log(arr[j]); }

  //for...in 是遍歷對象的健名,或者數組的下標(數組,對象都可用)

  存在的問題:1)在某些情況下,這段代碼可能按照隨機順序遍歷數組元素,

             2)數組原型鏈上的屬性都能被訪問到  

Array.prototype.a=123;
Array.prototype.foo=function(){};
var arr=[2,3];
for(let k in arr){ console.log(arr[k]);//2,3,123,function() }
但是我們可以進行過濾處理(也不是很麻煩)
for(let k in arr){
  arr.hasOwnProperty(k)&& console.log(arr[k]);
}

總之:for-in是為普通對象設計的,你可以遍歷得到字符串類型的鍵,因此不適用於數組遍歷

for(var i in arr){
    console.log(arr[i]);
}
for(var i in obj){
    console.log(i);
}

//for …of….遍歷數組的鍵值,不能遍歷對象,但是可以遍歷類數組對象(也是數組),還可以用來遍歷一個字符串(它將字符串視為一系列的Unicode字符來進行遍歷:) for(let value of arr){ console.log(value); } 利用for....of....遍歷一個字符串 for(var chr of "abcdefr"){   console.log(chr); } 結果:a,b,c,d,e,f,r
//js中forEach只能遍歷數組,不能遍歷對象
存在的問題:不能使用break語句中斷循環,也不能使用return語句返回到外層函數。
arr.forEach(function(e){ console.log(e); }); //js中的forEach只是支持對數組的遍歷,不支持對對象的遍歷 /* obj.forEach(function(e){ console.log(e); }); */ //arr.map只能遍歷數組 arr.map(function(v,i){ console.log(v,i); }); arr.map((v,i)=>(console.log(i,v)));    var list = new Map().set('a',1).set('b',2).set('c',3);    console.log(list);    for (var [key,value] of list) {     console.log(key + ' => ' + value);    }
</script> </body> </html>

 

  


免責聲明!

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



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