整理JavaScript循環數組和對象的方法


 

  眾所周知,常用的循環語句有for、while、do-while、for-in,forEach以及jQuery中提供的循環的方法;以及ES6中提供的很多用來循環對象的方法如map,

  在 Javascript 中,當某些條件得到滿足時,用 break 語句來中斷一個循環的運行。(請注意,也用 break 語句退出一個 switch 塊。參見 Javascript 條件語句)。如果是一個 for 或者 for...in 循環,在更新計數器變量時使用 continue 語句越過余下的代碼塊而直接跳到循環的下一次重復中。

//數組長度
let len = 200;

//准備測試數組
let arr = new Array();
for (let i = 0 ; i < len; i++){
    arr.push("abc"+i);
}

第一部分:循環數組的方法

1、for循環

//正向for循環
for(let i = 0, len = arr.length; i < len; i++){
    let value = arr[i];
}
//反向for循環
for(let i = arr.length; i > 0; i--){
    let value = arr[i];
}

2、while循環

let i = 0;
let len = arr.length;
while(i < len){
    let value = arr[i];
    i++;
}

3、do-while循環

let i = 0;
let len = arr.length;
do{
    let value = arr[i];
    i++;
}while(i < len);

4、for-in循環

//循環數組時for-in循環相對性能很差,其主要用於循環對象。
for(let item in arr){
    let value = item;
}

5、forEach方法

//這個方法執行是沒有返回值的,對原來數組也沒有影響;
//forEach方法中的this是原數組,匿名回調函數中的this默認是window;
let res = arr.forEach((val, ind, input)=>{
    let value = val;    //數組的每一項的值
    let index = ind;    //數組的索引值
    let array = input;  //原數組
    input[ind] = val*10;    //可以改變原數組 
})
console.log(arr);//原數組已經改變
console.log(res);//undefined

6、map方法

//map:和forEach非常相似,都是用來遍歷數組中的每一項值的,用來遍歷數組中的每一項;
//區別:map的回調函數中支持return返回值;
//return的是什么,相當於把數組中的這一項變為什么
//(並不影響原來的數組,只是相當於把原數組克隆一份,把克隆的這一份的數組中的對應項改變了);
//不管是forEach還是map 都支持第二個參數值,第二個參數的意思是把匿名回調函數中的this進行修改。
let res = arr.map((val, ind, input)=>{
    let value = val;    //數組中的每一項的值
    let index = ind;    //數組的索引
    let array = input;  //原數組
    return val*10;      //數組中的每一項return出去為map方法的返回值
})
console.log(arr);//原數組未改變
console.log(res);//原數組改變后的數組

注:不管是forEach還是map在IE6-8下都不兼容(不兼容的情況下在Array.prototype上沒有這兩個方法),那么需要我們自己封裝一個都兼容的方法,代碼如下:

/**
* forEach遍歷數組
* @param callback [function] 回調函數;
* @param context [object] 上下文;
*/
Array.prototype.myForEach = function myForEach(callback,context){
    context = context || window;
    if('forEach' in Array.prototye) {
        this.forEach(callback,context);
        return;
    }
    //IE6-8下自己編寫回調函數執行的邏輯
    for(var i = 0,len = this.length; i < len;i++) {
        callback && callback.call(context,this[i],i,this);
    }
}

/**
* map遍歷數組
* @param callback [function] 回調函數;
* @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback,context){
    context = context || window;
    if('map' in Array.prototye) {
        return this.map(callback,context);
    }
    //IE6-8下自己編寫回調函數執行的邏輯
    var newAry = [];
    for(var i = 0,len = this.length; i < len;i++) {
        if(typeof  callback === 'function') {
            var val = callback.call(context,this[i],i,this);
            newAry[newAry.length] = val;
        }
    }
    return newAry;
}

7、jQuery中遍歷數組的方法$.each()

$.each(arr, (ind, val)=>{
    let index = ind;//數組中每一項的索引
    let value = val;//數組中每一項的值
})

第二部分:循環對象的方法

//對象中鍵值對個數
let len = 200;

//准備測試數組
let obj = new Object();
for (let i = 0 ; i < len; i++){
    obj[`index${i}`] = `value${i}`;
}

1、for-in用來遍歷非數組對象

for(let ind in obj){
    let index = ind;    //對象中的每一項的鍵名
    let value = obj[ind];   //對象中的每一項的值
}

2、jQuery中遍歷對象的方法$.each()

$.each(obj, (ind, val)=>{
    let index = ind;    //對象中每一項的鍵名
    let value = val;    //對象中每一項的值
})

3、ES6新提供的對象的遍歷方法

(未完待續。。。)


免責聲明!

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



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