数组的方法有哪些是浅拷贝
时间: 2023-11-17 21:05:46 浏览: 22
1. Array.prototype.concat()
2. Array.prototype.slice()
3. Array.prototype.filter()
4. Array.prototype.map()
5. Array.prototype.reduce()
6. Array.prototype.flatMap()
7. Array.from()
相关问题
数组的深拷贝和浅拷贝
数组的深拷贝和浅拷贝是关于复制数组时的不同方式。
浅拷贝是指将原始数组的引用复制给新的数组,这意味着新数组和原始数组引用同一块内存地址。当修改新数组时,原始数组也会受到影响。这是因为它们共享相同的数据。在 JavaScript 中,可以使用`slice()`或`concat()`方法来实现浅拷贝。
例如:
```javascript
let originalArray = [1, 2, 3];
let shallowCopy = originalArray.slice();
shallowCopy[0] = 4;
console.log(originalArray); // [1, 2, 3]
console.log(shallowCopy); // [4, 2, 3]
```
深拷贝是指创建一个全新的数组,并将原始数组中的值复制到新数组中。这样,新数组和原始数组将互不影响,因为它们占用不同的内存空间。通常需要递归遍历原始数组的每个元素,然后将其复制到新数组中。在 JavaScript 中,可以使用`JSON.parse(JSON.stringify())`方法来实现深拷贝。
例如:
```javascript
let originalArray = [1, 2, 3];
let deepCopy = JSON.parse(JSON.stringify(originalArray));
deepCopy[0] = 4;
console.log(originalArray); // [1, 2, 3]
console.log(deepCopy); // [4, 2, 3]
```
需要注意的是,深拷贝有时可能会带来性能问题,并且无法复制函数和非原始类型的对象。
js数组的深拷贝和浅拷贝
JavaScript 中的数组拷贝分为浅拷贝和深拷贝两种方式:
1.浅拷贝:
浅拷贝只是拷贝了对象或数组的引用,两个变量指向同一个内存地址,修改其中一个,另一个也会随之修改。常见的实现方式有:Object.assign()、Array.slice()等。
2.深拷贝:
深拷贝会在堆内存中开辟新的空间存储复制的数据,两个变量指向不同的内存地址,修改其中一个不会影响另一个。常见的实现方式有:JSON.parse(JSON.stringify(obj))、递归实现、第三方库如 lodash 等。
需要注意的是,使用 JSON.parse(JSON.stringify(obj)) 深拷贝时,会忽略 undefined、function、symbol 三种类型的属性。
相关推荐
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)