时间: 2020-09-6|tag: 76次围观|0 条评论

一、实现浅拷贝

直接赋值

let obj = { a: 1, b: { x: 2 }, arr: [1, [2], 3]};let obj1 = objobj1.b.x = 20;console.log(obj1);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};console.log(obj);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};

Object.assign方法

let obj = { a: 1, b: { x: 2 }, arr: [1, [2], 3]};let obj1 = Object.assign(obj);obj1.b.x = 20;console.log(obj1);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};console.log(obj);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};

for···in循环

function lightCopy(obj) {  let copy = Array.isArray(obj) ? [] : {};  for (let i in obj) {    copy[i] = obj[i];  }  return copy;}let obj = { a: 1, b: { x: 2 }, arr: [1, [2], 3]};let obj1 = lightCopy(obj);obj1.b.x = 20;console.log(obj1);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};console.log(obj);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};

二、实现深拷贝

JSON.stringify方法

function deepCopy(obj) {  let copy = JSON.parse(JSON.stringify(obj))  return copy}let obj = { a: 1, b: { x: 2 }, arr: [1, [2], 3]};let obj1 = deepCopy(obj);obj1.b.x = 20;console.log(obj1);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};console.log(obj);// expected output: { a: 1, b: { x: 2 }, arr: [1, [2], 3]};

for···in循环加递归

function deepCopy(obj) {  let copy = obj instanceof Array ? [] : {};  for (let i in obj) {    if (obj.hasOwnProperty(i)) {      copy[i] = typeof obj[i] === "object" ? deepCopy(obj[i]) : obj[i];    }  }  return copy;}let obj = { a: 1, b: { x: 2 }, arr: [1, [2], 3]};let obj1 = deepCopy(obj);obj1.b.x = 20;console.log(obj1);// expected output: { a: 1, b: { x: 20 }, arr: [1, [2], 3]};console.log(obj);// expected output: { a: 1, b: { x: 2 }, arr: [1, [2], 3]};

文章转载于:https://www.jianshu.com/p/91b1bc5f4fb8

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《JavaScript实现深浅拷贝
   

还没有人抢沙发呢~