js遍歷集合

遍歷

for-in

  • 只遍歷對象自身的和繼承的可枚舉的屬性數組

    Object.prototype.enumer=function(){
        console.log("可枚舉的");
    }
    
    var obj={a:1,b:2};
    for(var o in obj){
        console.log(o);
    }
    
    // a
    // b
    // enumer
    
    //enumer是繼承來的可枚舉屬性
  • 在遍歷數組時不建議使用,由於for-in遍歷不能保證遍歷順序,而且若是數組原型上添加了屬性,也會被遍歷出來;
建議:

在遍歷數組時用for方法,若是遍歷對象用for-in,再次建議相對for-in來講,它會遍歷出繼承來的可枚舉對象,因此更建議使用Obect.keys()方法函數

forEach

  • 按照索引的順序按個傳遞給定義的一個函數,而且能夠在原數組的基礎上進行修改spa

    var arr=[1,2,4,5];
    arr.forEach(function(x,i,a){
        a[i] = x+1 
    }) ;
    
    // 其中調用函數中有三個參數,x 表示數組中元素,i 表示下標,a 表示數組自己
  • 回調過空位,而且保留空位prototype

    var arr=[1,2,,,3,4];  
    arr.forEach(function(x,i,a){
        a[i] = x+1 
    });
    arr;  // [2, 3, , , 4, 5]

map()

  • 將調用的數組的每一個元素傳遞給指定的函數,並返回一個新數組,且函數必須有返回值code

    var arr=[1,2,3];
    arr.map(function(x){ 
        return x * x; 
    });
    arr;  // [1,4,9]
  • 若是是稀疏數組,返回的也是相同方式的稀疏數組;它具備相同的長度,相同的缺失元素;

filter()

  • 判斷傳遞函數返回值是true仍是falsetrue 表示此數組元素被添加到返回數組(新數組)中,false 則相反;
  • 返回一個新數組(經過邏輯判斷的),而且返回的是稠密的數組對象

    [1,2,3].filter(function( x , i ,arr ){   
    return x<3;
    });  
    //  [1,2]
    
    // 其中三個參數和forEach表示的同樣;
  • filter() 會跳過稀疏數組中缺乏的元素,它的返回數組老是稠密的;
filter的兩種用法:
  • 用來壓縮稀疏數組繼承

    var dense = sparse.filter(function(){
        return true; 
    });
  • 壓縮空缺並刪除undefined和null元素:索引

    a = a.filter(function(x){
        return x !==undefined && x !=unll; 
    });

every() / some()

二者都是經過對數組元素應用指定的函數進行斷定,返回true或者false原型

  • every() 當且僅當針對數組中的全部元素經過判斷都是true時,函數返回true,若是有一個爲false,那麼函數返回false
  • some() 當數組中有一個元素經過判斷是true時,函數返回true;若是要返回false,必須全部元素都返回false才能夠;it

    [1,3,5].every(function(x){ 
    return x<8 ;
    });  
    // true  元素都返回true
    
    [1,2,4].some(function(x){ 
    return 4 % 4 === 0; 
    })  
    // true 有一個元素返回true
  • 二者都是確認返回什麼值,它們就會中止遍歷數組元素;
  • 在空數組上,every()返回true,some()返回 false

reduce()

  • 使用指定的函數將數組元素進行組合,生成單個值,有兩個參數:
  • 第一個參數是執行化簡的函數(化簡函數就是用某種方法把兩個值組合或化簡爲一個值,並返回化簡後的值),第二個參數是一個傳遞給函數的初始值;

    var arr=[1,2,4];
    var brr=arr.reduce(function(res,x,i,arr){
        // 其中 res 表示每次化簡後的值,x 表示數組元素,i 表示數組下標,arr 表示數組自己
        return res + x;
    },1);
    brr;  // 8

    其中1是初始值,初始值存在的時候,res首先賦初始值,x賦數組第一個元素,進行運算以後,res賦返回的值,x賦數組的第二個元素 ......,若是初始值不存在,那麼resx 分別賦數組第一個和第二個元素,以此類推 ......;

  • 在空數組中,不帶初始值參數調用reduce將會報錯

    var arr=[];
    var brr=arr.reduce(function(res,x){
        return res+x;
    }); 
    // TypeError: Reduce of empty array with no initial value
  • 若是數組只有一個值且沒有指定初始值,或者有一個空數組且指定一個初始值,reduce只會返回那個值,不會調用化簡函數;

reduceRight()

  • 工做原理和reduce同樣,不一樣的是它按照數組索引從高到低(從左到右)處理數組

for...of...遍歷

暫無

相關文章
相關標籤/搜索