用于对象数组副本的 Splice 方法

时间:2021-04-20 09:36:56

标签: javascript arrays splice

我对扩展运算符如何在对象数组上工作感到有些困惑。假设我有一个对象数组,例如:

const array = [
{ name: 'Object 1', body: '123'},
{ name: 'Object 2', body: '456'}];

如果我制作一个克隆并在克隆上使用拼接:

const cloneArray = [...array];
const newObject = { name: 'Object 3', body: '789'}
cloneArray.splice(1,1,newObject);

我会:

 const array = [
{ name: 'Object 1', body: '123'},
{ name: 'Object 2', body: '456'}];
 const cloneArray = [
{ name: 'Object 1', body: '123'},
{ name: 'Object 3', body: '789'}];

只修改克隆的数组。展开运算符不应该制作初始数组的浅拷贝,并强迫我深度克隆所有对象? 我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

您没有修改数组条目。

splice 替换一个数组条目。将这些对象视为指向一块内存的指针:

const array = [A, B];
const cloneArray = [...array];
//    ^ cloneArray = [A, B]

const newObject = C;
cloneArray.splice(1,1,newObject);
//    ^ cloneArray = [A, C]

现在,如果您要更改 A内容

array[0].foo = 'Bar';
// Or
cloneArray[0].foo = 'Bar';

然后您会在源数组和克隆中看到更改。

相关问题