陣列 物件 拷貝

2021-08-19 08:01:07 字數 1858 閱讀 9002

陣列拷貝

1、concat

let newarr = .concat(oldarr)
2、擴充套件運算子

let newarr = [...oldarr]
3、slice

let newarr = oldarr.slice(0)
4、json.parse和json.stringify

var newarr = json.parse(json.stringify(oldarr))
注:上面前三種拷貝方法中concat、擴充套件運算子、slice只能實現陣列的淺拷貝;第四種json實現的是陣列、物件的深拷貝。

物件拷貝

1、object.assign

let newobj = object.assign({},oldobj)
2、擴充套件運算子

let newobj =
3、json.parse和json.stringify

var newobj = json.parse(json.stringify(oldobj))
注:上面前兩種拷貝方法只能實現陣列的淺拷貝;第三種json實現的是陣列、物件的深拷貝。

利用迴圈和遞迴實現陣列和物件的深拷貝

function clone(obj).tostring.call(obj)=='[object object]' );

for(var i in obj)

}else if( {}.tostring.call(obj)=='[object array]' )); // '{}'

json.stringify(true); // 'true'

json.stringify("foo"); // '"foo"'

json.stringify([1, "false", false]); // '[1,"false",false]'

json.stringify(); // ''

json.stringify();

// ""

json.stringify([new number(1), new string("false"), new boolean(false)]);

// '[1,"false",false]'

json.stringify();

// '{}'

json.stringify([undefined, object, symbol("")]);

// '[null,null,null]'

json.stringify();

// '{}'

json.stringify(, [symbol.for("foo")]);

// '{}'

json.stringify(

, function (k, v)

});// undefined

// 不可列舉的屬性缺省會被忽略:

json.stringify(

object.create(

null,

, y: })

);// ""

js陣列物件拷貝

陣列拷貝 var arr old var new arr arr.concat arr 0 old new new arr 1 0 new console.log arr new console.log new arr new 如果陣列元素是基本型別,就會拷貝乙份,互不影響,而如果是物件或者陣列,就...

JS 物件陣列淺拷貝,深拷貝

物件陣列的深拷貝與淺拷貝,簡單點來說,就是b複製了a,當a被修改時,未操作b,但b也跟著變了,就是淺拷貝,反之是深拷貝 深拷貝本身只針對較為複雜的object型別資料 淺拷貝 var a var b a a 1 age 18 console.log a,b 執行結果,a,b的age都發生了改變 偽深...

js陣列,物件深拷貝

無事,封裝了乙個js深拷貝的方法 基本思路 deepcopy data data 可能是陣列也可能是物件 1.判斷data是陣列 物件或者其他資料型別 2.宣告空陣列 或者 空物件 res 3.分別處理 如果陣列元素或物件屬性值不是陣列或物件,空陣列或物件之間接收元素 res.push data i...