繁体   English   中英

使用字符串数组过滤 object 数组

[英]filter an array of object using an array of strings

我想通过字符串数组过滤出对象数组

let allUsers = [
{
  "avatar":null,
  "deleted":false,
  "_id":"5f1f5df967b3240004f50a36",
  "email":"emailroom3@test.com",
  "password":"$2a$10$5eKv6OVouPnPH.3g9STEYO990V.L14kpD2ImZ3AtZtHaRjCg4oj/6",
  "fcm":"fcm3",
  "createdAt":"2020-07-27T23:06:33.683Z",
  "updatedAt":"2020-07-27T23:06:33.683Z",
  "__v":0
},
{
  "avatar":null,
  "deleted":false,
  "_id":"5f1f5e0067b3240004f50a37",
  "email":"emailroom2@test.com",
  "password":"$2a$10$czA2dASdEo1Dw0oAxw.y1eJwg4lrZW12tLE6sUeG5k.PThuineTIm",
  "fcm":"fcm2",
  "createdAt":"2020-07-27T23:06:40.702Z",
  "updatedAt":"2020-07-27T23:06:40.702Z","__v":0
},
{
  "avatar":null,
  "deleted":false,
  "_id":"5f1f5d9167b3240004f50a33",
  "email":"emailroom1@test.com",
  "password":"$2a$10$0O2aDCCSibWlNznIWfHTxuY8vNq4Sge/YDRuntKJl9UKnSI.9TEfC",
  "fcm":"fcm1",
  "createdAt":"2020-07-27T23:04:49.285Z",
  "updatedAt":"2020-07-27T23:04:49.285Z",
  "__v":0
}]

let connectedUsers = ['5f1f5df967b3240004f50a36','5f1f5e0067b3240004f50a37']

output 应该是不在第二个数组中的第三个用户:

myArrayFiltered = [
  {
    "avatar":null,
    "deleted":false,
    "_id":"5f1f5d9167b3240004f50a33",
    "email":"emailroom1@test.com",
    "password":"$2a$10$0O2aDCCSibWlNznIWfHTxuY8vNq4Sge/YDRuntKJl9UKnSI.9TEfC",
    "fcm":"fcm1",
    "createdAt":"2020-07-27T23:04:49.285Z",
    "updatedAt":"2020-07-27T23:04:49.285Z",
    "__v":0
  }
]

我试过了

 let myArrayFiltered = allUsers.filter((user) => {
    return connectedUsers.some((el) => {
      return user._id !== el;
    });
  });

但它返回所有 3 个用户

编辑:所有答案都返回第二个数组中的 2 个用户,但我想要的是不是的用户,ID 为 '5f1f5d9167b3240004f50a33' 的用户

您不需要遍历第二个数组。 您只需检查user._id是否在connectedUsers数组中。 像这样:

 let allUsers = [{"avatar":null,"deleted":false,"_id":"5f1f5df967b3240004f50a36","email":"emailroom3@test.com","password":"$2a$10$5eKv6OVouPnPH.3g9STEYO990V.L14kpD2ImZ3AtZtHaRjCg4oj/6","fcm":"fcm3","createdAt":"2020-07-27T23:06:33.683Z","updatedAt":"2020-07-27T23:06:33.683Z","__v":0},{"avatar":null,"deleted":false,"_id":"5f1f5e0067b3240004f50a37","email":"emailroom2@test.com","password":"$2a$10$czA2dASdEo1Dw0oAxw.y1eJwg4lrZW12tLE6sUeG5k.PThuineTIm","fcm":"fcm2","createdAt":"2020-07-27T23:06:40.702Z","updatedAt":"2020-07-27T23:06:40.702Z","__v":0},{"avatar":null,"deleted":false,"_id":"5f1f5d9167b3240004f50a33","email":"emailroom1@test.com","password":"$2a$10$0O2aDCCSibWlNznIWfHTxuY8vNq4Sge/YDRuntKJl9UKnSI.9TEfC","fcm":"fcm1","createdAt":"2020-07-27T23:04:49.285Z","updatedAt":"2020-07-27T23:04:49.285Z","__v":0}]; let connectedUsers = ['5f1f5df967b3240004f50a36','5f1f5e0067b3240004f50a37']; let myArrayFiltered = allUsers.filter(user => { return connectedUsers.includes(user._id); }); console.log(myArrayFiltered); // myArrayFiltered = [{"avatar":null,"deleted":false,"_id":"5f1f5d9167b3240004f50a33","email":"emailroom1@test.com","password":"$2a$10$0O2aDCCSibWlNznIWfHTxuY8vNq4Sge/YDRuntKJl9UKnSI.9TEfC","fcm":"fcm1","createdAt":"2020-07-27T23:04:49.285Z","updatedAt":"2020-07-27T23:04:49.285Z","__v":0}]

您可以使用 indexOf 方法检查数组中的项目或不作为

let myArrayFiltered = allUsers.filter((user) => {
        return connectedUsers.indexOf(user._id) > -1;
      });

 let allUsers = [{"avatar":null,"deleted":false,"_id":"5f1f5df967b3240004f50a36","email":"emailroom3@test.com","password":"$2a$10$5eKv6OVouPnPH.3g9STEYO990V.L14kpD2ImZ3AtZtHaRjCg4oj/6","fcm":"fcm3","createdAt":"2020-07-27T23:06:33.683Z","updatedAt":"2020-07-27T23:06:33.683Z","__v":0},{"avatar":null,"deleted":false,"_id":"5f1f5e0067b3240004f50a37","email":"emailroom2@test.com","password":"$2a$10$czA2dASdEo1Dw0oAxw.y1eJwg4lrZW12tLE6sUeG5k.PThuineTIm","fcm":"fcm2","createdAt":"2020-07-27T23:06:40.702Z","updatedAt":"2020-07-27T23:06:40.702Z","__v":0},{"avatar":null,"deleted":false,"_id":"5f1f5d9167b3240004f50a33","email":"emailroom1@test.com","password":"$2a$10$0O2aDCCSibWlNznIWfHTxuY8vNq4Sge/YDRuntKJl9UKnSI.9TEfC","fcm":"fcm1","createdAt":"2020-07-27T23:04:49.285Z","updatedAt":"2020-07-27T23:04:49.285Z","__v":0}] let connectedUsers = ['5f1f5df967b3240004f50a36','5f1f5e0067b3240004f50a37'] let myArrayFiltered = allUsers.filter((user) => { return connectedUsers.indexOf(user._id) > -1; }); console.log(myArrayFiltered)

在您的解决方案中,您正在检查某些元素是否不等于用户 ID,但您可能的意思是检查某些元素是否匹配它:

let myArrayFiltered = allUsers.filter((user) => {
  return connectedUsers.some((el) => {
    return user._id === el;
  });
});

这正确地只返回 2 个用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM