删除运算符不在Javascript中工作

删除运算符不在Javascript中工作,javascript,json,node.js,mongoose,ecmascript-6,Javascript,Json,Node.js,Mongoose,Ecmascript 6,这是一个函数,用于在JSON对象返回到客户端之前从该对象中删除敏感信息。传递到函数中的数据可能是JSON对象或JSON对象数组。为什么这个功能不起作用 我知道这个问题还有其他的解决办法,但这让我的大脑很烦 我在这个函数中记录了大量的信息,即使JavaScript是异步的,函数也是按照它们应该的顺序运行的——递归在命中最终返回语句之前完成 现在的问题是,尽管一切似乎都在运行,并且delete操作符正在返回true,但当函数最终返回时,被删除的属性仍然存在 示例从MongoDB获取的数据: [

这是一个函数,用于在JSON对象返回到客户端之前从该对象中删除敏感信息。传递到函数中的数据可能是JSON对象或JSON对象数组。为什么这个功能不起作用

我知道这个问题还有其他的解决办法,但这让我的大脑很烦

我在这个函数中记录了大量的信息,即使JavaScript是异步的,函数也是按照它们应该的顺序运行的——递归在命中最终返回语句之前完成

现在的问题是,尽管一切似乎都在运行,并且
delete
操作符正在返回
true
,但当函数最终返回时,被删除的属性仍然存在

示例
从MongoDB获取的数据

[
    {
        'id': '1',
        'name': 'John',
        'password': 'test123',
        'emailAddress': 'john@example.com',
        'emailAddressVerificationCode': 'A897D'
    },
    {
        'id': '2',
        'name': 'Andrew',
        'password': 'test123',
        'emailAddress': 'andrew@example.com',
        'emailAddressVerificationCode': '90H8D'
    },
    {
        'id': '3',
        'name': 'Matthew',
        'password': 'test123',
        'emailAddress': 'matthew@example.com',
        'emailAddressVerificationCode': '56C7C'
    }
]
如有任何想法,将不胜感激

UserService.cleanJSON = (data) => {

    if (Array.isArray(data)) {
        for (let i = 0; i < data.length; i++){
            data[i] = UserService.cleanJSON(data[i]);
        }
    } else {

        if (data.password) delete data.password;
        if (data.emailAddressVerficationCode) delete data.emailAddressVerficationCode;
        if (data.mobileNumberVerificationCode) delete data.mobileNumberVerificationCode;
        if (data.accountType) delete data.accountType;
    }


    return data;
};
UserService.cleanJSON=(数据)=>{
if(Array.isArray(数据)){
for(设i=0;i
删除JSON中最后一个花括号后的逗号。

您可能正在使用Mongoose或任何其他ODM,对吗? 如果是这样,您必须知道,除非调用方法
.lean()
(),否则无法更改结果


除非分离结果,否则Mongoose会保护模型不受任何修改。

您能否提供一个初始化
数据的示例,该示例不起作用?此外,
可能与您的问题无关,但是可能不需要从函数返回
数据
,因为它正在编辑通过引用传入的原始对象。此函数将按预期工作。问题出在别的地方。这行是打字错误吗
if(data.emailAddressVerficationCode)删除data.emailAddressVerficationCode验证,而不是验证。除此之外,它在Chrome控制台中对我很好。当我运行代码时,它会删除
password
属性,因此@MezoIstvan是正确的。这是一个问题中的输入错误。在应用程序中,数据是从MongoDB获取的,不会有这些错误。这很有效!我从来不知道猫鼬的事。非常感谢。感谢@johnyhk也给了我这个答案。事实上,如果你确定你不会更改查询结果的模型,你应该始终使用.lean();您将花费更少的内存并提高性能,因为对象将更轻。另一个技巧是使用投影,这样你就不会从数据库中得到任何你不打算使用的值。从现在开始我会这样做。有没有一种方法可以使用lean而不必使用回调的
.exec()
语法,而是我的示例中使用的回调语法?