【问题标题】:Deep copy of the Object to add a key : value深拷贝 Object 添加一个 key : value
【发布时间】:2021-05-24 19:16:38
【问题描述】:

我正在使用 mongoosenext.jsreact-query 从数据库中预取产品。我想知道为什么我需要对嵌套对象进行深层复制才能为其添加键:值。否则它不起作用。让我知道我不明白的地方。

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

【问题讨论】:

  • 你认为你为什么需要这样做? “它不起作用”到底是什么意思?
  • 当我尝试添加一个新的 key:value 时没有深层副本它不起作用。我不知道为什么。
  • “它不起作用”是什么意思?会发生什么?任何事物?是否报告了错误?
  • 什么也没发生。没有错误。没有新键:添加到对象的值。

标签: javascript reactjs next.js react-query


【解决方案1】:

原因是获取的产品是 Mongoose 文档,而不是普通的旧 JavaScript 对象。

当您将其转换为普通的旧 javascript 对象时,您将能够为其添加任何键。

您可以在查询中添加 .lean() 或在获取的文档中添加 toObject/toJSON

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2021-01-07
    • 2012-04-12
    • 2015-01-13
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多