gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:25:42 24 4
gpt4 key购买 nike

我有一个事件对象,它是通过 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com