两个具有相同值的对象,计算和更改一个对象的值.第二个也具有新的价值
Two objects with the same value, calculating and changing values of one object. And the second one misteriously has the new values too
可能
已经太晚了,我可能会变得疯狂,但这怎么可能。
我有以下情况:
var x = {a: [], b: []};
var y = {a: [], b: []};
Model.someFunction(obj1, function(res){
x.a = res;
y.a = res;
Model.someFunction(obj2, function(res){
x.b = res;
y.b = res;
macheWasAnderes();
// Content of both objects:
// x = {a: [punkt1: 20, punkt2: 30}, b: {punkt1: 50, punkt2: 60}]};
// y = {a: [punkt1: 20, punkt2: 30}, b: {punkt1: 50, punkt2: 60}]};
});
});
function macheWasAnderes(){
for(let prop in x){
for(let i = 0; i < x[prop].length; i++){
for(let propa in x[prop][i]){
x[prop][i][propa] = x[prop][i][propa] / 100;
}
}
}
console.log("x", x);
console.log("y", y);
// x = {a: [punkt1: 0.02, punkt2: 0.03}, b: {punkt1: 0.05, punkt2: 0.06}]};
// y = {a: [punkt1: 0.02, punkt2: 0.03}, b: {punkt1: 0.05, punkt2: 0.06}]};
}
如您所见,我从模型函数的回调中接收了一些数据。完成这些操作后,我调用 machWasAnderes() 函数以便使用我的 x 对象进行计算。对于这个例子,我只是改变它的值除以一百并以这种方式保存它。
奇怪的是,当我打印出两个对象时,对象 y 也得到了计算值......
这怎么可能?
注意 这不是我的确切代码。我的代码要长得多,所以我创建了一个更简单的代码副本,其中包含该问题。
让我们开始一些基础知识。有两种类型的副本:浅拷贝和深拷贝。
- 浅拷贝是指仅将引用复制到其他参照而不复制到数据。所以基本上两个引用都指向同一个对象。这意味着更改一个对象也会影响其他引用。
- 深层复制是指创建数据的副本,然后将其分配给引用。
来到你的案例:当你说
x.a = res;
y.a = res;
两者都引用了与您执行浅层复制相同的对象。因此,当您更改x.a
时,它反过来也会影响y.a
。x.b
和y.b
也是如此
阅读此内容..https://nikhilmachcha.wordpress.com/2015/08/24/deep-copy-vs-shallow-copy-php-way/
希望这对你有帮助!!
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何计算一个对象中五个属性中有多少是非null的
- 使计算属性依赖于emberjs中另一个对象的所有属性
- 两个具有相同值的对象,计算和更改一个对象的值.第二个也具有新的价值
- 计算对象函数JavaScript中另一个对象属性的长度
- 计算对象的值之和's基于另一个对象的属性'动态生成的属性
- 抛出TypeError错误:null不是一个对象(计算"$("body").append&
- 如何计算一个对象的值
- 使用javascript reduce来过滤一个对象数组,以找到计算出的最低统计数据
- 如何修复:TypeError: 'null'不是一个对象(计算'event.relatedTar