javascript之遍歷數組及對象

var arr = [18,20,26];
var obj = {name:"xiaohong",sex:"f",age:"18"};數組

for 可用於數組的遍歷函數

for(var i=0;i<arr.length;i++){
   //i爲index
    console.log(i+':'+arr[i]);
}

for in/for of 遍歷this

for in 會遍歷對象全部可枚舉的屬性,包括prototype的,可經過hasOwnProperty()來過濾,使得只有私有屬性被遍歷

for(var key in obj){
    //遍歷key
    if(obj.hasOwnProperty(key)){
        console.log(key+':'+obj[key]);
    }
}

for of 用於遍歷全部可遍歷(有Symbol.iterator屬性)的collection的數值

//用於數組遍歷
for(var val of arr){
    console.log(val); 
}


//用於對象屬性值遍歷,這裏的對象必須是iterable的

 for(var val of obj){
        console.log(val); 
    }

or 

  for(var [key,val] of obj){
        //遍歷key & value
        console.log(key+":"+val); 
  }

Note: for...of適合用來遍歷數組,for…in也可用於遍歷數組,可是若是經過Array.prototype.xxx爲Array原生對象添加了屬性,則會在該遍歷中被讀到。prototype

foreach,map,filter,reduce 用於數組遍歷code

foreach 用於數組遍歷,無返回值對象

arr.foreach(function(value,index,thisArray){
    //三個參數,分別爲索引,值,當前array
    console.log(index+':'+value);
});

mapfilter會返回一個新的數組索引

var newArr = arr.map(function(value,index,thisArray){
    //三個參數,分別爲索引,值,當前array
    return value*2;
});

var newArr = arr.filter(function(value,index,thisArray){
    //三個參數,分別爲索引,值,當前array
    return value>100;    //根據return爲false或true來決定是否留下當前元素
});

reduce會返回一個累加值generator

var sum = arrreduce.reduce(function(previousValue, currentValue, currentIndex, thisArray) {
          return previousValue + currentValue;
    });

Note: 以上函數均可以用箭頭函數書寫,例如reduce:it

var sum = arrreduce.reduce((previousValue, currentValue) => previousValue + currentValue);

使用iterator進行遍歷io

主要是經過iterator的next()函數進行遍歷,須要定義generator和[Symbol.iterator]屬性。
相關文章
相關標籤/搜索