对象的深拷贝以添加键:值

Deep copy of the Object to add a key : value

我正在使用 mongoosenext.jsreact-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 添加到您获取的文档中