如何在 nodejs 中链接过滤器和映射方法?

How to chain filter and map methods in nodejs?

所以我正在做一个项目,我正在调用数据库以检索存储在那里的数据。此数据以数组形式出现。这是代码:

  const allLogins = await Login.find().sort("name");

  const token = req.header("x-auth-token");

  const user = jwt.verify(token, config.get("jwtPrivateKey"));

  const logins = allLogins
    .filter((login) => login.userId === user._id)
    .map((login) => {
      login.password = decrypt(login.password);
    });

如果我在解密 运行 之后调用 console.log,我会看到它已正确完成。我遇到的问题是,如果我 console.log(logins) 它说它是两个未定义的项目的数组。相反,如果我 运行 像这样...

  const allLogins = await Login.find().sort("name");

  const token = req.header("x-auth-token");

  const user = jwt.verify(token, config.get("jwtPrivateKey"));

  let logins = allLogins.filter((login) => login.userId === user._id);
    
  logins.map((login) => {
      login.password = decrypt(login.password);
    });

然后它就可以正常工作了。我不确定为什么第一组代码不起作用,为什么第二组代码起作用。

如有任何帮助,我们将不胜感激!

基本:

  • 数组。过滤器 - 接受回调并回调 return 布尔值(符合我们的条件)
  • array.map - 接受回调并回调 return 转换后的对象

在第二个工作示例中:

logins.map((login) => { 
   // note: logins is iterated but not assigned to logins back
   // so accessing login is working
   login.password = decrypt(login.password); // map should return data
 + return login; // if we update all code will work
});

现在来看第一个例子:

const logins = allLogins
     .filter((login) => login.userId === user._id)
     .map((login) => {
      login.password = decrypt(login.password);
      + return login; // this will fix the issue 
    });