对象的深拷贝以添加键:值
Deep copy of the Object to add a key : value
我正在使用 mongoose
、next.js
和 react-query
从数据库中预取产品。我想知道为什么我需要对嵌套对象进行深层复制才能向其添加 key:value 。否则它不起作用。让我知道我不明白的地方。
await queryClient.prefetchQuery(['productSlug', slug], async () => {
const product = await read(slug);
const existingRatingObject = product.ratings.find(
(item) => item.postedBy.toString() === user._id.toString()
);
const copyProduct = JSON.parse(JSON.stringify(product));
if (existingRatingObject) {
copyProduct.star = existingRatingObject.star;
} else {
copyProduct.star = 0;
}
console.log({ copyProduct });
return JSON.stringify(copyProduct);
});
原因是获取的产品是 Mongoose 文档而不是普通的旧 JavaScript 对象。
当您将其转换为普通的旧 javascript 对象时,您将能够向其添加任何密钥。
您可以将 .lean() 添加到您的查询中或将 toObject/toJSON 添加到您获取的文档中
我正在使用 mongoose
、next.js
和 react-query
从数据库中预取产品。我想知道为什么我需要对嵌套对象进行深层复制才能向其添加 key:value 。否则它不起作用。让我知道我不明白的地方。
await queryClient.prefetchQuery(['productSlug', slug], async () => {
const product = await read(slug);
const existingRatingObject = product.ratings.find(
(item) => item.postedBy.toString() === user._id.toString()
);
const copyProduct = JSON.parse(JSON.stringify(product));
if (existingRatingObject) {
copyProduct.star = existingRatingObject.star;
} else {
copyProduct.star = 0;
}
console.log({ copyProduct });
return JSON.stringify(copyProduct);
});
原因是获取的产品是 Mongoose 文档而不是普通的旧 JavaScript 对象。
当您将其转换为普通的旧 javascript 对象时,您将能够向其添加任何密钥。
您可以将 .lean() 添加到您的查询中或将 toObject/toJSON 添加到您获取的文档中