javascript - js 物件深拷貝和賦值
扔个三星炸死你
扔个三星炸死你 2017-07-05 11:04:38
0
4
953

程式碼中得到一個陣列arr=[1,2,3];
因為馬上會被銷毀,所以不能直接賦值給物件Obj.a,
請問這種情況jquery如何寫,使得arr銷毀之後Obj.a=[1,2,3]?

扔个三星炸死你
扔个三星炸死你

全部回覆(4)
仅有的幸福

一般情況下很少會在 JS 中遇到「銷毀」。然後,我不明白你所謂的立即銷毀是指什麼?

如果是指 delete arr,那麼直接賦值也不會有問題,如下圖:

如果你是要改變 arr 的內容。那麼可以複製一個陣列(有幾種方法,concat 只是其中一種)

Obj.a = [].concat(arr);

如果確實需要深拷貝,jQuery.fn.clone(),不過貌似有一些限制。

如果其它數據,自己寫深拷貝還是有點難度也比較麻煩,不如用 Lodash 的 cloneDeep()

Ty80

拷貝數組:

利用 slice

obj.a = arr.slice(); 

利用 JSON

obj.a = JSON.parse(
    JSON.stringify(arr)
); 

巴扎黑

沒看懂你銷毀的意思。 。 。 。
至於深拷貝:

function cloneObj(obj){
    if( !obj || typeof obj == "string" ){
        return obj;
    } else if ( obj instanceof Array ){
        return [].concat(obj);
    } else {
        var tempObj = {};
        for( var key in obj ){
            tempObj[key] = cloneObj(obj[key]);
        }
        return tempObj;
    }
}
滿天的星座

如果你使用 ES2015 的話,可以使用物件展開運算子來拷貝。

obj.a = [...arr]
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板