1

我在 Nodejs 中从数据库(使用 Mongoose 的 Mongodb)中获取用户结果。现在我想删除用户结果中的一些键。但无法删除其属性。我搜索了很多次,但没有找到任何删除的解决方案

例子:-

File1.js 通过 mongo 查询获取用户

userModel.findOne(query, projection)
      .then(function (result) {
          if (result)
              return result;
          return false
      })

上面的查询从数据库中获取结果,结果看起来像

user = {
 f_name: "Vikas",
 l_name: "Kohli",
 key1: "abcD",
 key2: "dhdhdh"

}

文件2.js

user = {
     f_name: "Vikas",
     l_name: "Kohli",
     key1: "abcD",
     key2: "dhdhdh"

    }
 inputuser = "dfdfhdfgy"

使用用户结果的 key1 创建用户密钥,然后进行比较

(_.isEqual(userkey, user.key2)){
 //call to next file
}else{
//send response as key not matched
}

做一些逻辑,获取用户的密钥,然后使用 key2 做一些加密方法

最后将 key2 与 userResullt key 2(我从 db 获取)进行比较,如果没问题,则传递给下一个函数

File3.js 预期输出:-

user = {
         f_name: "Vikas",
         l_name: "Kohli"
        }

当前情景:-

user = {
         f_name: "Vikas",
         l_name: "Kohli",
         key1: "abcD"
         key2: "dhdhdh"

        }

现在要发送带有已删除 key1 和 key2 但无法删除该键的用户结果的响应

delete 关键字不会删除继承的属性,但是如果你删除一个原型属性,它会影响从原型继承的所有对象。(来自 w3schools,developer.mozilla)

还发现了一些有用的链接,但没有一个对我有用。我怎样才能做到这一点?

澄清 javascript 无法删除继承的属性。

为什么即使没有从对象中删除属性,删除运算符也会返回 true

4

3 回答 3

1

用户对象中存在逗号语法错误,更正并应用删除运算符

user = {
 f_name: "Vikas",
 l_name: "Kohli",
 key1: "abcD",
 key2: "dhdhdh"
}

delete user.key1
delete user.key2
于 2018-06-18T07:49:13.320 回答
0

delete不适用于猫鼬返回的模型,但可以在转换为对象后删除。

user = user.toObject();
delete user.key1;
delete user.key2;
于 2018-11-26T08:14:06.503 回答
0

您可以从现有对象创建一个新对象,并获取您需要的属性:

let user = {
    f_name: "Vikas",
    l_name: "Kohli",
    key1: "abcD",
    key2: "dhdhdh"
}

user = (({f_name, l_name}) => ({f_name, l_name}))(user);

console.log(user);

如果您有许多要保留的属性,而只有少数要拒绝,那么您可以像这样列出要拒绝的属性:

let user = {
    f_name: "Vikas",
    l_name: "Kohli",
    key1: "abcD",
    key2: "dhdhdh"
}

const reject = new Set(["key1", "key2"]);
user = Object.assign(...Object.entries(user)
                              .filter(([k,v]) => !reject.has(k))
                              .map(([k,v]) => ({[k]: v})));

console.log(user);

于 2018-11-24T19:27:13.513 回答