从 Javascript 对象中删除值

Posted

技术标签:

【中文标题】从 Javascript 对象中删除值【英文标题】:Remove value from Javascript object 【发布时间】:2017-06-19 16:19:18 【问题描述】:

所以我从猫鼬那里得到了这个对象,它是一个用户。我想删除散列密码字段,但我似乎无法删除它。

尝试了以下方法:

apiRoutes.get('/user/:id', function(req, res, next) 
  User.findById(req.params.id, function(err, post) 
    if (err) return next(err);
    delete post['password'];
    res.json(post);
  );
);

那里肯定有一个密码字段,当我 debug/console.log 打印出密码的对象时。

编辑:通过向猫鼬调用传递一个选项来解决它:

User.findById(req.params.id, '-password', function(err, post)  /* ... */ );

但仍然没有解释为什么删除不起作用?

【问题讨论】:

这里只是猜测,但应该是post.password而不是post['password'] post.hasOwnProperty('password') 返回什么?可能是它是具有密码属性的祖先对象... @B_CooperA 没关系,两个都试了 对象是否密封? Object.seal() @B_CooperA 它不应该有所作为;某些对象属性可以标记为“不可删除”。尝试深度复制对象并从副本中删除密码。对于深拷贝,我使用 JSON.parse(JSON.stringify(object)),结果它是最快的:) 【参考方案1】:

mongoose 返回的对象似乎不是真正的 javascript 对象。

我必须将它转换为一个对象才能使用它的基本功能:

apiRoutes.get('/user/:id', function (req, res, next) 
User.findById(req.params.id, function (err, post) 
    if (err) return next(err);
    post.toObject();
    delete post.password;
    res.json(post);
);

【讨论】:

以上是关于从 Javascript 对象中删除值的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历 JavaScript 对象数组并删除值

从“GET”参数(JavaScript)中获取值[重复]

javascript中,知道一个值,如何删除数组中的这个值的元素。

使用 JavaScript 从对象中递归删除属性和值的最快方法是啥?

使用 jquery 表中的复选框从数组中删除 JavaScript 对象

使用jquery表中的复选框从数组中删除JavaScript对象