JavaScript将属性附加到对象[重复]

Posted

技术标签:

【中文标题】JavaScript将属性附加到对象[重复]【英文标题】:JavaScript append property to object [duplicate] 【发布时间】:2015-11-24 22:22:57 【问题描述】:

我可能忽略了最简单的解决方案,但我已经尝试了任何我能想出或在互联网上找到的方法。

我正在尝试向我的输出中需要的 JSON 对象添加一个属性。但是无论我尝试添加该属性,它都不会出现在我的对象中。我验证了“doc”变量是一个实际的对象。

没有控制台错误。 Console.log() 显示 'doc' 对象的内容,仅此而已。

有人知道怎么回事吗?

Blog.findOne('slug': req.params.slug, function(err, doc) 

  if (!err)

    if(_.isEmpty(doc))  res.status(404).json( response: "Nothing found here." );  else 

      var blogPost = doc;
      blogPost.someProperty = 'test';
      console.log(blogPost); // doesn't contain new property

      res.status(200).json(  response: blogPost );

     

    else  throw err; 

 );

blogPost/doc 的输出


  "response": 
    "_id": "55e31854823389ec1f5506fc",
    "title": "A sample post.",
    "slug": "a-sample-post2",
    "body": "Hello world. This is a sample post. \n\nThis should be a new paragraph.",
    "__v": 0,
    "date": "2015-08-30T14:51:00.836Z"
  

像这样在浏览器中进行的简单测试确实有效。所以我真的很困惑为什么它在我的 NodeJS 应用程序中不起作用。与回调/异步有关吗?

var test = ; 
test.prop = "test"; 
console.log(test);
Object prop: "test"

【问题讨论】:

任何控制台错误?它是否包含任何属性? @Amit 没有控制台错误,是的,它包含原始“文档”包含的内容,但仅此而已。 我想知道对象的内部[[Extensible]]属性是否设置为false @MatthewVita - 那是我的下一个方向...... :-)。它可能是。杰西,用一个新的简单对象包装你的doc,并在那里设置属性:var blogPost = doc: doc, someProperty = 'test'; @MatthewVita Object.isExtensible(blogPost) = true (对于 doc)我将发布文档的输出,第二! 【参考方案1】:

如果你想得到object的结果,你应该使用lean函数。

您甚至可以重新格式化您的代码以消除缩进级别。

Blog.findOne('slug': req.params.slug).lean().exec(function(err, doc) 

    if (err)
      throw err;
    

    if(_.isEmpty(doc))  
       res.status(404).json( response: "Nothing found here." ); 
       return;
    

    // else is not required
    var blogPost = doc;
    blogPost.someProperty = 'test';

    res.status(200).json(  response: blogPost );
 );

【讨论】:

感谢代码优化!下次应该多想想! 我总是尽量避免嵌套。使其更具可读性;)

以上是关于JavaScript将属性附加到对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将序列号属性附加到javascript中的对象数组

将数据附加到属性文件,注释消失并更改数据顺序[重复]

将动态加载的 javascript 事件处理程序附加到动态加载的 HTML [重复]

在JavaScript中写入文件时将每个字符串附加到新行[重复]

Javascript动态地将函数附加到对象

在JavaScript中将一个数组附加到另​​一个数组[重复]