JavaScript实现json数据深拷贝的几种方法
发表于:2023-08-13 01:59:53浏览:1454次
在 JavaScript 中,对象和数组(包括 JSON 对象)是引用类型,因此直接将一个 JSON 对象赋值给另一个变量,实际上是将引用传递给了新的变量。这意味着,如果您修改了变量 A,原始的 JSON 对象也会受到影响。要避免修改原始 JSON 对象,需要进行深拷贝,创建一个原始 JSON 对象的副本,然后对副本进行修改。
可以使用一些库或函数来实现深拷贝,例如 JSON.parse() 和 JSON.stringify(),或者使用递归方法,或者使用第三方库如 Lodash 的 _.cloneDeep()。
1、以下是使用 JSON.parse() 和 JSON.stringify() 实现深拷贝的示例:
// 原始的 JSON 对象
var originalJson = { key1: "value1", key2: "value2" };
// 深拷贝到变量 A
var variableA = JSON.parse(JSON.stringify(originalJson));
// 修改变量 A,不影响原始 JSON 对象
variableA.key1 = "new value";
console.log(originalJson); // { key1: "value1", key2: "value2" }
console.log(variableA); // { key1: "new value", key2: "value2" }
请注意,虽然这种方法可以避免修改原始 JSON 对象,但在处理大型对象或嵌套结构时可能会有性能方面的考虑。在这种情况下,可以考虑下面的两种方式。
2、使用递归
通过递归的方式深度遍历对象,将每个属性的值进行复制。需要处理被复制对象为值类型的情况以及属性值中包含对象的情况。需要注意的是,为了防止循环引用导致死循环,需要记录已经遍历过的对象。
function deepClone(obj){
var newobj={}
for(let key in obj){
if(typeof obj[key]=="Object"){
newobj[key]=copyObj(obj[key])
}
else{
newobj[key]=obj[key]
}
}
return newobj
}
3、以下是使用 Lodash 进行深拷贝的示例:
// 导入 Lodash 库
var _ = require('lodash');
// 原始的 JSON 对象
var originalJson = { key1: "value1", key2: { subKey: "subValue" } };
// 深拷贝到变量 A
var variableA = _.cloneDeep(originalJson);
// 修改变量 A,不影响原始 JSON 对象
variableA.key2.subKey = "new subValue";
console.log(originalJson); // { key1: "value1", key2: { subKey: "subValue" } }
console.log(variableA); // { key1: "value1", key2: { subKey: "new subValue" } }
推荐文章
- 谷歌Chrome浏览器v101稳定版发布 支持FedCM和优先级提示等新功能
- ThinkPHP6+JS实现大文件分片上传,切片上传
- 开源OA 办公系统 — 勾股 OA 4.60.28 发布
- PHP实现隐藏部分手机号码,身份证号码
- 原生js和jquery方式获取浏览器的各种高度和宽度(页面width和height)
- 微信小程序如何跳转进入公众号文章的方法
- PHP写入文件的方法,读取文件内容的五种方式
- 2021年度个税汇算今起开始,3月1日至3月15日需要预约,3月16日至6月30日,无需预约
- PHP8出来也已经有一段时间了 说说PHP8的新特性
- Thinkphp6在Windows下使用Phpstudy工具升级或全局安装composer