for in,for of, for,forEach,map的區(qū)別

最近一直有在面試,各種準(zhǔn)備,博客,慕課網(wǎng)都成了???,看了那么久那么認(rèn)真,都把自己給感動了,然而呢,一道題幾家公司幾家問,知道就是說不出來,網(wǎng)上一看很多,說的也很對,看完是懂了,但是沒有自己去整理去記憶,還是會被一次次問的語無倫次,所以就從這篇開始吧。
這道題有兩家公司都有問到,表現(xiàn)的都不理想,從一開始的答不出來,到后邊的答不到重點(diǎn),進(jìn)步很小,慚愧呀,話不多說,開始學(xué)習(xí)。

for...in根據(jù)key遍歷

for...in區(qū)別:

  • 遍歷對象時會從原型上繼承屬性,可以用hasOwnProperty()識別出繼承屬性,
  • 遍歷數(shù)組會把數(shù)組下標(biāo)看做屬性名,也就輸出結(jié)果是數(shù)組的下標(biāo),且不一定按照數(shù)組的索引順序。
  • 輸出結(jié)果是字符串
function Person(name){
    this.name = name;
}
Person.prototype.getName = function(){
    return this.name;
}
var child= new Person('lala');
for (let i in child){
    console.log(i);
}
//name
//getName
for (let i in child){
  if(child.hasOwnProperty(i)){
    console.log(i);
  }
}
//name
var aa = ['aa','bb','cc'];
for(let i in aa){
  console.log(i);
}
// 0  1  2

for...of根據(jù)值遍歷

for...of用來遍歷數(shù)據(jù),例如數(shù)組中的值,但是也可以遍歷字符串,支持Map和Set對象的遍歷,避免了所有for...in的弊端,與forEach相比可以正確響應(yīng)break,continue,return語句。

var aa = ['aa','bb','cc'];
for(let i of aa){
  console.log(i);
}
// aa  bb  cc
var str='abc';
for(let i of str){
  console.log(i);
}
// a  b  c
var set=new Set(['aa','bb','cc']);
for(let i of set){
  console.log(i);
}
//aa  bb  cc

forEach根據(jù)index遍歷

forEach一般只能適用于數(shù)組,功能是從頭到尾把數(shù)組遍歷一遍,可以有三個參數(shù),后兩個可以不寫

var arr = ['aa','bb'];
arr.forEach(function(v,i,a){
    console.log(v,i,a);//分別對應(yīng):數(shù)組元素,元素的索引,數(shù)組本身
});
//aa  0  ['aa','bb']
//bb  1  ['aa','bb']

講真基礎(chǔ)還是需要多練習(xí),聽說forEach是for循環(huán)的加強(qiáng)版,就想自己去實(shí)現(xiàn)下,結(jié)果想的有些復(fù)雜了還沒做出來,于是百度了下,居然那么簡單。

Array.prototype.eachFor = function(fn){
  for(let i=0;i<this.length;i++){
    fn(this[i],i,this);
  }
}
var aa=[5,6,7];
aa.eachFor(function(v,i){
  console.log(v,i);
});
//5  0
//6  1
//7  2

map根據(jù)index遍歷

和forEach相比,使用方法一樣有三個參數(shù),map只能對元素進(jìn)行加工處理,產(chǎn)生一個新的數(shù)組對象。

var arr=[1,2,3];
arr.map(function(v,i,arr){
  return v*2;
});
//[2,4,6]

filter

filter對原數(shù)組進(jìn)行過濾篩選,生成新的數(shù)組,使用和map樣有三個參數(shù)。如果對空數(shù)組進(jìn)行篩選,會返回undefined。filter不會改變原數(shù)組。

var aa=[1,2,1,2,3];
aa.filter(function(v,i,self){
    return self.indexOf(v) == i;
});
//[1,2,3]

for

for常規(guī)語句遍歷,可循環(huán)數(shù)字,字符串,數(shù)組

for(let i=0;i<5;i++){
  console.log(i);
}
//0  1  2  3  4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容