如图,为什么删除cc的一项后data也会改变,有没有办法删除cc的一项后data不改变
多谢大家,只能采纳一个,对不起了
数组是引用对象,这里的data和cc指向同一个数组对象[1,2,3]。因此操作一个会影响另一个。如果不想互相影响,克隆一个cc即可,var cc = Array.from(data)
数组是引用传值,而push(),pop(),splice()都是会修改调用的数组。concat()和slice()不会。
var da=[1,2,3]; var c=da.concat(); c.splice(0,1);console.log(da);console.log(c);
这个不是赋值,而是将数组data的引用赋给cc,所以改变data也会改变cc;
应该这样:
1、var cc = [].concat(data);
//concat方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。将data与一个空数组连接返回一个新数组,来达到copy的结果
2、var cc=data.slice(0);
//返回一个新数组,从0到最后,该方法不会改变现有的数组。
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答936 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
吼吼...
题主请百度一下javascript深复制和浅复制的问题
浅复制案例代码如下:
是不是与你的代码如出一辙?
深复制可以通过ES6的Array.from来实现,代码如下:
也可以通过rest扩展运算符(...)实现,但是这个对于多层嵌套的对象有些小问题...暂时不太推荐