【问题标题】:Remove object attribute with array map使用数组映射删除对象属性
【发布时间】:2015-09-01 14:52:05
【问题描述】:

我有一个对象数组。数组的每个元素都有一个我想删除的属性。 我的代码:

        //remove the version key '__v'
        var elements = elements.map(function (element) {
            if (element.__v !== undefined) {
                delete element.__v;
                //console.log(element.__v);
            }
            return element;
        });//elements.map()
        console.log(elements);

如果我取消注释 console.log(element.__v);,我会得到 __v 的属性值。 但是,在最终的输出中,仍然包含 __v 属性的元素仍然存在。

【问题讨论】:

  • 添加了mongoose标签。

标签: javascript arrays mongoose


【解决方案1】:

这是因为您有一个 Mongoose 模型(假设您使用 mongoose 因为 __v 属性进行版本控制)被冻结(防止属性表单被删除),您可以做的一件事是:

//remove the version key '__v'
    var elements = elements.map(function (element) {
        element = element.toJSON();
        if (element.__v !== undefined) {
            delete element.__v;
            //console.log(element.__v);
        }
        return element;
    });//elements.map()
    console.log(elements)

但这不是最佳解决方案,因为您可能会丢失许多您可能已在模型上编码的功能(例如实例方法/通过 .populate 获取更多数据的能力等)

如果您在移除属性后不需要模型特征,请使用此解决方案。

【讨论】:

  • 太令人惊讶了......你是如何猜到 OP 使用 Mongoose 的?他甚至没有提到它。
  • 这是一个假设,因为我最近遇到了同样的问题,而用于版本控制的 __v 属性是猫鼬的事情。但我可能错了。即使假设他使用的是猫鼬我错了,他描述的症状通常与冻结的对象有关(例如,您可能对续集模型有同样的问题)
  • 我确实在猫鼬 find() 查询中运行了这个。感谢您的回答和解释!
猜你喜欢
  • 2012-01-23
  • 2019-09-15
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多