使用“=”运算符复制对象,更改不会反映在数组中
Copy object with "=" operator, changes not reflected in array
所以这是一个非常简单的问题。假设我们有一个包含多个对象的数组。然后,通过使用 find
函数,我们 select 数组中的一个对象。如果我更改该对象的属性,则更改会按预期反映在数组中。
但是,如果我用不同的对象定义一个新变量并将其设置为数组中的 selected 项,则更改不可见。例如:
let
arr = [
{
id: 1,
name: 'James',
prop: {
my: 'prop'
}
},
{
id:2,
name:'Delaney',
prop:
{
my:
'prop'
}
}
],
item = arr.find(x => x.id > 1),
newItem =
{
id: 3,
name:'test',
prop: {
my: 'test'
}
};
item = newItem;
console.log(newItem);
console.log(item);
console.log(arr);
这里我希望由于 item
和 newItem
具有相同的值,因此 arr
中也会看到更改,但事实并非如此。如果我在 item
上更改单个 属性,则更改是可见的。给出了什么?
将变量 item
想象成路标。它指向内存中函数arr.find()
返回的对象所在的位置。接下来您创建另一个路标 newItem
指向您新创建的对象。
当您写 item = newItem
时,您是在说:"Hey roadsign item
, can you point towards the object that is currently pointed by newItem
?"
所以这是一个非常简单的问题。假设我们有一个包含多个对象的数组。然后,通过使用 find
函数,我们 select 数组中的一个对象。如果我更改该对象的属性,则更改会按预期反映在数组中。
但是,如果我用不同的对象定义一个新变量并将其设置为数组中的 selected 项,则更改不可见。例如:
let
arr = [
{
id: 1,
name: 'James',
prop: {
my: 'prop'
}
},
{
id:2,
name:'Delaney',
prop:
{
my:
'prop'
}
}
],
item = arr.find(x => x.id > 1),
newItem =
{
id: 3,
name:'test',
prop: {
my: 'test'
}
};
item = newItem;
console.log(newItem);
console.log(item);
console.log(arr);
这里我希望由于 item
和 newItem
具有相同的值,因此 arr
中也会看到更改,但事实并非如此。如果我在 item
上更改单个 属性,则更改是可见的。给出了什么?
将变量 item
想象成路标。它指向内存中函数arr.find()
返回的对象所在的位置。接下来您创建另一个路标 newItem
指向您新创建的对象。
当您写 item = newItem
时,您是在说:"Hey roadsign item
, can you point towards the object that is currently pointed by newItem
?"