简体   繁体   English

深拷贝Object 添加一个key:value

[英]Deep copy of the Object to add a key : value

I am pre-fetching a product from a database using mongoose with next.js and react-query .我正在使用mongoosenext.jsreact-query从数据库中预取产品。 I was wondering why I need to do a deep copy of a nested object in order to add a key:value to it.我想知道为什么我需要对嵌套的 object 进行深层复制才能为其添加键:值。 Otherwise it does not work.否则它不起作用。 Let me know what I am not understanding.让我知道我不明白的地方。

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);
});

The reason is that the product fetched is a Mongoose document not a plain old JavaScript object.原因是获取的产品是 Mongoose 文档,而不是普通的旧 JavaScript object。

When you convert it to plain old javascript Object, you will be able to add any key to it.当您将其转换为普通的旧 javascript Object 时,您将能够向其添加任何密钥。

You can add.lean() to you query or add toObject/toJSON to you the fetched document您可以在查询中添加.lean() 或将 toObject/toJSON 添加到获取的文档中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM