使用字符串数组过滤对象数组

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


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']

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


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”的用户


Smart猫小萌
浏览 170回答 3
3回答

侃侃无极

您不需要遍历第二个数组。你只需要检查它是否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}]

慕的地6264312

您可以使用 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 个用户。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript