1. 程式人生 > >js陣列克隆方法 總結

js陣列克隆方法 總結

方法一:for(){}

最笨low的方法

Array.prototype.clone = function(){
    var a = [];
    for(var i=0;i<this.length;i++){
        a.push(this[i]);
    }
    return a;
};

//使用呼叫
var arr = [1,true,{},"a"];
var arr2 = arr.clone();

方法二:Array物件的slice()方法

slice()方法是通過引數start和end的傳入值來返回陣列中的一段(擷取陣列),且該方法不對原陣列進行操作。
我們可以通過slice(0)來擷取整個原陣列,從而得到一個新陣列。

Array.prototype.clone = function(){
    return this.slice(0);
};

//使用呼叫
var arr = [1,true,{},"a"];
var arr2 = arr.clone();

方法三:Array物件的concat()方法

concat()是用來實現陣列的合併。
我們可以通過和一個空陣列的合併,來實現克隆功能。

Array.prototype.clone = function(){
     return [].concat(this);
     //或者return this.concat([]);
     //或者return this.concat();
}; //使用呼叫 var arr = [1,true,{},"a"]; var arr2 = arr.clone();

遍歷結果注意:

如果要遍歷以上陣列的話,用for(){} 和 for-in遍歷後的結果是不同的。
這也說明了為什麼for-in對遍歷陣列並不友好;遍歷陣列用for-of更好。
(1)用for(){} 遍歷arr或arr2

for(var i=0;i<arr.length;i++){
    console.log("第" + i + "次遍歷:" + arr[i]);
}

執行結果:
這裡寫圖片描述
(2)用for-in 遍歷arr或arr2

for(key in
arr2){ console.log("第" + key + "次遍歷:" +arr2[key]); }

執行結果:
這裡寫圖片描述