在JavaScript中,将数据从一个JSON对象复制到另一个JSON对象可以通过多种方式实现。以下是一些常见的方法:
Object.assign()
方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
const oldJson = {
name: 'Alice',
age: 25,
hobbies: ['reading', 'traveling']
};
const newJson = {};
Object.assign(newJson, oldJson);
console.log(newJson); // 输出: { name: 'Alice', age: 25, hobbies: ['reading', 'traveling'] }
展开运算符允许一个表达式在某些位置展开数组或对象。
const oldJson = {
name: 'Alice',
age: 25,
hobbies: ['reading', 'traveling']
};
const newJson = { ...oldJson };
console.log(newJson); // 输出: { name: 'Alice', age: 25, hobbies: ['reading', 'traveling'] }
这种方法适用于需要深度复制的情况,即复制对象的所有嵌套属性。
const oldJson = {
name: 'Alice',
age: 25,
hobbies: ['reading', 'traveling'],
address: {
city: 'New York',
zip: '10001'
}
};
const newJson = JSON.parse(JSON.stringify(oldJson));
console.log(newJson); // 输出: { name: 'Alice', age: 25, hobbies: ['reading', 'traveling'], address: { city: 'New York', zip: '10001' } }
原因:使用 Object.assign()
和展开运算符进行复制时,如果对象包含嵌套对象,这些方法只会进行浅复制,即只复制嵌套对象的引用,而不是实际的对象。
解决方法:使用 JSON.parse()
和 JSON.stringify()
进行深复制。
const oldJson = {
name: 'Alice',
address: {
city: 'New York',
zip: '10001'
}
};
const newJson = Object.assign({}, oldJson);
newJson.address.city = 'Los Angeles';
console.log(oldJson.address.city); // 输出: 'Los Angeles',因为浅复制导致新旧对象共享嵌套对象
const oldJson = {
name: 'Alice',
address: {
city: 'New York',
zip: '10001'
}
};
const newJson = JSON.parse(JSON.stringify(oldJson));
newJson.address.city = 'Los Angeles';
console.log(oldJson.address.city); // 输出: 'New York',因为深复制创建了新的嵌套对象
通过以上方法,你可以根据具体需求选择合适的方式将数据从旧的JSON复制到新的JSON。
领取专属 10元无门槛券
手把手带您无忧上云