javascript - 删除不适用于 NodeJs 中的 javascript 对象

标签 javascript node.js mongodb mongoose

我有一个事件对象,它是通过 Mongoose 插件从 MongoDB 中获取的。在这个对象中做了一些操作,最后我想把这个对象保存在另一个具有相同结构的集合中。

为此,我需要删除所有以“_”或“__”开头的属性,例如“_id”和“__v”。我写了这样的代码:

console.log(event);
console.log(delete event._id);
console.log(event);

第 1 行和第 3 行使用 _id 属性打印相同的值。如果我删除一些其他属性(如“代码”),同样可以正常工作。这是完整的事件对象:

{ _id: 5a51019b211d740a174a1fba,
  __t: 'EventModel',
  code: '02',
  event: 'testMe',
  source: 'user',
  target: 'cronjob',
  __v: 0,
  params: 
     [ { key: 'Nodics',
         value: 'Framework',
         _id: 5a51019b211d740a174a1fbb } ],
  log: [ 'Published Successfully' ],
  hits: 1,
  type: 'ASYNC',
  state: 'FINISHED',
  testProperty: 'Nodics Framework',
  updatedDate: 2018-01-13T17:04:15.288Z,
  creationDate: 2018-01-13T17:04:15.288Z 
}

请帮助我了解根本原因以及我该如何处理。对我来说,它看起来是直接的或继承的属性问题。但需要专家意见。

最佳答案

看起来您无法删除其中某些属性的原因是它们已被定义为“non-configurable”。但是,您的方法不是最优的,因为它必然会改变其论点。 永远,永远,改变一个论点。曾经。

与其从 event 中删除属性,不如构造一个只包含所需属性的新对象。

  • 您可以将您希望转移(和保存)的特定属性列入白名单
  • 您可以将不想保存的特定属性列入黑名单
  • 您可以使用 Object.getOwnPropertyNames
  • 仅传输直接存在于对象上的属性,而不是原型(prototype)链上的属性

像 lodash 这样的库有做这种事情的糖分:

// safelist (using lodash)
var saveableEvent = _.pick(event, ['code', 'event', 'source', 'target', 'params', 'log', 'hits', 'type', 'state', 'testProperty', 'updatedDate', 'creationDate']);

// or blocklist (using lodash)
var saveableEvent = _.omit(event, ['_id', '__t', '__v']);

// only copy object's own properties (without lodash)
var saveableEvent = Object.getOwnPropertyNames(event)
.reduce(function(out, propName) {
    return Object.assign(out, event[propName])
}, {})

// create editable copy of object, then remove undesired props
var saveableEvent = event.toObject();
delete saveableEvent._id;

关于javascript - 删除不适用于 NodeJs 中的 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130432/

相关文章:

javascript - 如何使用 promise 返回在 nodejs 的快速路由器中递归编辑的对象数组?

javascript - 另一个函数在 jquery ajax 请求结束之前运行,忽略应用程序顺序

javascript - NodeJS : Trouble scraping two URLs with promises

javascript - 通过 id 在 schema 中搜索数组

node.js - 如何为 node.js 应用程序运行 mocha 测试的 make 命令

node.js - 在 Node/Express 的异步函数中捕获错误

node.js - mongodb使用json更新同一行的多个字段

javascript - 卸载不触发 componentWillUnmount 的 child

javascript - 在 React 中渲染后执行一个函数

mysql - NodeJS/MySQL/Promise 的问题