js 浅拷贝和深拷贝怎么写
时间: 2024-11-17 08:03:53 AIGC 浏览: 169
在JavaScript中,浅拷贝和深拷贝用于创建对象的副本,它们的区别在于复制的对象层次是否深入到嵌套的对象或数组。
**浅拷贝(Shallow Copy):**
浅拷贝只复制了最外层的对象或数组结构,并不会递归地复制嵌套的对象属性。以下是浅拷贝的简单实现:
```javascript
function shallowCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
```
或使用`Object.assign()` 或扩展运算符 `...`:
```javascript
function shallowCopy(obj) {
return Object.assign({}, obj);
// 或者
let copy = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = obj[key];
}
}
return copy;
}
```
**深拷贝(Deep Copy):**
深拷贝会递归地对所有嵌套的对象和数组进行复制,确保所有的引用都被替换为新的独立对象。可以使用`lodash`库的`_.cloneDeep()`函数,或者自定义一个深拷贝函数:
```javascript
// 使用lodash的深拷贝
import _ from 'lodash';
function deepCopy(obj) {
return _.cloneDeep(obj);
}
// 自定义深拷贝
function deepCopy(obj, stack = []) {
if (Array.isArray(obj)) {
return [...obj.map(item => deepCopy(item, stack))];
} else if (typeof obj === 'object' && obj !== null) {
let clone = {};
stack.push(obj);
for (let key in obj) {
if (!stack.includes(obj[key])) {
clone[key] = deepCopy(obj[key], stack);
}
}
stack.pop();
return clone;
} else {
return obj; // 基本数据类型直接返回
}
}
```
阅读全文
相关推荐


















