美文网首页Web 前端开发 让前端飞
数组中的json发生共用空间、污染原始对象的处理方法

数组中的json发生共用空间、污染原始对象的处理方法

作者: BrightenSun | 来源:发表于2018-01-22 15:23 被阅读0次

当后台传输一个数组中有json数据时,你想重新赋值给其他变量后修改新的变量时,你会发现你修改新的变量时,原始的数组也会发生变化,究竟是什么场景呢,我们来还原一下。

var arr = [{"a":11111},{"b":11111},{"c":11111},{"d":11111},{"e":11111},{"f":11111},{"g":11111}];
var arr1 = [];
//****这里是处理的方法
arr1[0]['a']=22222;  //这里是修改新变量的数据
console.log(arr,arr1);  //当我们输出时你会发现是这样的数据
item1.png
这可不是我们想要的,出现这种情况我试了两种办法。

1、

var arr = [{"a":11111},{"b":11111},{"c":11111},{"d":11111},{"e":11111},{"f":11111},{"g":11111}];
var arr1 = [...arr];  //这里是处理的方法
arr1[0]['a']=22222;  //这里是修改新变量的数据
console.log(arr,arr1);  //当我们输出时你会发现是这样的数据

2、

var arr= [{"a":11111},{"b":11111},{"c":11111},{"d":11111},{"e":11111},{"f":11111},{"g":11111}];
var arr1 = [];
for(var i=0;i<arr.length;i++){
     arr1.push(arr[i])
}
arr1[0]['a']=22222;
console.log(arr,arr1);
事实证明以上两种方法都无法达到我们想要的结果。怎么办呢?

解决办法1、

var arr= [{"a":11111},{"b":11111},{"c":11111},{"d":11111},{"e":11111},{"f":11111},{"g":11111}];
var arr1 = [];
for(var i=0;i<arr.length;i++){
     arr1.push(Object.assign({},arr[i]))
}
arr1[0]['a']=22222;
console.log(arr,arr1);

解决办法2、

var arr= [{"a":11111},{"b":11111},{"c":11111},{"d":11111},{"e":11111},{"f":11111},{"g":11111}];
var arr1=JSON.parse(JSON.stringify(arr));
arr1[0]['a']=22222;
console.log(arr,arr1);

这个就是会吧原来的数据转化为字符串,这是针对对象的所有引用关系就不复存在了,然后再转化回来就是一个全新的对象。不在出现新对象改动污染原始对象的问题了!!

办法来源链接:https://www.cnblogs.com/anhaiming/p/deepClone.html
item2.png

这才是我们想要的数据。

相关文章

  • 数组中的json发生共用空间、污染原始对象的处理方法

    当后台传输一个数组中有json数据时,你想重新赋值给其他变量后修改新的变量时,你会发现你修改新的变量时,原始的数组...

  • 数组中的json发生共用空间、污染原始对象的处理方法

    当后台传输一个数组中有json数据时,你想重新赋值给其他变量后修改新的变量时,你会发现你修改新的变量时,原始的数组...

  • 有关ajax的杂七杂八

    json方法处理后端数据有 1/ JSON.stringify():将对象、数组或json转为字符串 2/ JSO...

  • Array API

    map map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map() 方法按照原始数组...

  • JSON数组

    数组作为JSON对象 实例 JSON数组在中括号中书写 JSON对象中的数组 对象属性的值可以是一个数组实例:

  • 2020-06-25 javascript .map()

    map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 map() 方法按照原始数组元素顺...

  • 第三章 Caché JSON 迭代数组

    第三章 Caché JSON 迭代数组 动态实体使用标准的迭代方法%GetNext(),该方法同时处理对象和数组。...

  • JavaScript----map、foreach、for、fo

    map() map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值注意:map方法不会改变原始数组 ...

  • map()方法

    定义和用法 map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map() 方法按照原始...

  • js中的{}与[]的深度克隆

    数组与对象直接克隆,克隆类中的数组只是获得了原始类中的数组指向。原始类和克隆类中的数组指向同一个空间,当你需要操作...

网友评论

    本文标题:数组中的json发生共用空间、污染原始对象的处理方法

    本文链接:https://www.haomeiwen.com/subject/rkmlaxtx.html