Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
287 views
in Technique[技术] by (71.8m points)

Javascript deep copy using JSON.parse and JSON.stringify

Is the below method a foolproof way of deep copying an object in Javascript i.e. even for very deeply nested objects/arrays ?

let newObj = JSON.parse(JSON.stringify(obj));
question from:https://stackoverflow.com/questions/65661795/javascript-deep-copy-using-json-parse-and-json-stringify

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

In short, this is a simple but unreliable deep copy that works for simple JavaScript objects. But it would likely fail for some non-primitive data types' properties.

const set = new Set();
set.add(1);
set.add(2);

const map = new Map();
map.set('Jessie', {phone: "213-555-1234", address: "123 N 1st Ave"})

const obj = {
  foo: () => 'bar',
  date: new Date(),
  undefined,
  set,
  map,
}

console.log(obj);

let unreliableNewObj = JSON.parse(JSON.stringify(obj));
console.log(unreliableNewObj); // some properties are lost, some properties are changed like set and map, can compare the result

// ES6 shallow copy that may help
let reliableNewObj = {
 ...obj,
}
console.log(reliableNewObj);

// 'real' deep copy from library
// https://lodash.com/docs#cloneDeep
let deepObj = _.cloneDeep(obj); // if _ is imported
console.log(deepObj)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...