首頁  >  問答  >  主體

javascript - js 物件深拷貝和賦值

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

扔个三星炸死你扔个三星炸死你2638 天前901

全部回覆(4)我來回復

  • 仅有的幸福

    仅有的幸福2017-07-05 11:06:38

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

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

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

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

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

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-07-05 11:06:38

    拷貝數組:

    利用 slice

    obj.a = arr.slice(); 

    利用 JSON

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-07-05 11:06:38

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

    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;
        }
    }

    回覆
    0
  • 滿天的星座

    滿天的星座2017-07-05 11:06:38

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

    obj.a = [...arr]

    回覆
    0
  • 取消回覆