1
JK9993 2021-05-08 16:00:00 +08:00 1
因为你修改的是对象的 id,而不是交换新数组里元素的位置。新数组里的对象引用的还是原来的。另外当前场景下 Array.prototype.slice 比 map 更合适
|
2
MonkeyD1 OP 大意了 我自己发的帖子 我自己也不能删😑
|
3
MonkeyD1 OP @JK9993 感谢🤦♂️, 我以为 有一层 map 已经拷贝了 没想到里面的对象 拷贝的还是指针 我去看看 slice
|
4
MonkeyD1 OP 已解决 let newArr = JSON.parse(JSON.stringify(arr));
|
5
liyang5945 2021-05-08 16:15:11 +08:00 via Android
newArr = arr.concat()
|
6
MonkeyD1 OP @liyang5945 不行的噢 需要深拷贝
|
7
liyang5945 2021-05-08 16:26:17 +08:00
@MonkeyD1 #6 上面那句就是深拷贝,不会改变原数组,你可以试下
|
8
chogath 2021-05-08 16:26:54 +08:00 1
JSON.parse(JSON.stringify(object)) 存在一些不足,例如:
1. 拷贝的对象的值中如果有函数, undefined, symbol,则经过 JSON.stringify() 序列化后的 JSON 字符串中这个键值对会消失 2. 无法拷贝不可枚举的属性,无法拷贝对象的原型链 3. 拷贝 Date 引用类型会变成字符串 4. 拷贝 RegExp 引用类型会变成空对象 5. 无法拷贝对象的循环引用(即 obj[key] = obj) 所以还是建议你直接手写,或者用第三方库,例如:lodash.cloneDeep |
9
christin 2021-05-08 17:48:34 +08:00 via iPhone 1
@liyang5945
concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。 concat 并不是深拷贝 而是返回新数组 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/concat |