您可以使用 for...in 循环遍历 obj1,并使用对象和数组的属性访问语法将其属性值复制到 obj2 中对应的属性中。如果 obj2 中存在嵌套的对象或数组,则需要递归地进行处理。以下是一个示例
function copyObject(obj1, obj2) {
for (let key in obj1) {
if (obj1.hasOwnProperty(key)) {
if (Array.isArray(obj2[key])) {
// 如果 obj2[key] 是一个数组,则递归地将 obj1[key] 复制到数组中的每个元素中
obj2[key].forEach((item) => {
copyObject(obj1[key], item);
});
} else if (typeof obj2[key] === 'object') {
// 如果 obj2[key] 是一个对象,则递归地将 obj1[key] 复制到该对象中
copyObject(obj1[key], obj2[key]);
} else {
// 否则直接将 obj1[key] 的值赋给 obj2[key]
obj2[key] = obj1[key];
}
}
}
}
在上面的代码中,我们定义了一个 copyObject()
函数,它接收两个参数 obj1
和 obj2
。该函数首先使用 for...in 循环遍历 obj1
的属性,并检测 obj2
中对应属性的类型。如果 obj2
中对应属性是一个数组,则递归地将 obj1
复制到数组中的每个元素中;如果 obj2
中对应属性是一个对象,则递归地将 obj1
复制到该对象中;否则直接将 obj1
的值赋给 obj2
。
在主程序中,我们首先定义了两个对象 obj1
和 obj2
,然后调用 copyObject()
函数将 obj1
中的属性值复制到 obj2
中对应的属性中。最后,我们打印更新后的 obj2
。
如果需要将 obj2
中的属性值复制到 obj1
中对应的属性中,可以修改 copyObject()
函数以实现反向操作。以下是一个示例代码:
function copyObject(obj1, obj2) {
for (let key in obj2) {
if (obj2.hasOwnProperty(key)) {
if (Array.isArray(obj2[key])) {
// 如果 obj2[key] 是一个数组,则递归地将 obj2[key] 复制到 obj1[key] 中的每个元素中
obj2[key].forEach((item, index) => {
if (obj1[key][index]) {
copyObject(obj1[key][index], item);
} else {
obj1[key].push(item);
}
});
} else if (typeof obj2[key] === 'object') {
// 如果 obj2[key] 是一个对象,则递归地将 obj2[key] 复制到 obj1[key] 中
if (!obj1[key]) {
obj1[key] = {};
}
copyObject(obj1[key], obj2[key]);
} else {
// 否则直接将 obj2[key] 的值赋给 obj1[key]
obj1[key] = obj2[key];
}
}
}
}