Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用字符串数组筛选对象数组_Javascript - Fatal编程技术网

Javascript 使用字符串数组筛选对象数组

Javascript 使用字符串数组筛选对象数组,javascript,Javascript,我想通过字符串数组过滤对象数组 让诱惑者=[ { 阿凡达:空, 删除:false, _id:5F1F5DF967B340004F50A36, 电邮:emailroom3@test.com, 密码:$2a$10$5EKV6OVOUPPH.3g9STEYO990V.L14KPD2IMZ3ATZHARJCG4OJ/6, fcm:fcm3, 创建日期:2020-07-27T23:06:33.683Z, 更新日期:2020-07-27T23:06:33.683Z, __v:0 }, { 阿凡达:空, 删除

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

让诱惑者=[ { 阿凡达:空, 删除:false, _id:5F1F5DF967B340004F50A36, 电邮:emailroom3@test.com, 密码:$2a$10$5EKV6OVOUPPH.3g9STEYO990V.L14KPD2IMZ3ATZHARJCG4OJ/6, fcm:fcm3, 创建日期:2020-07-27T23:06:33.683Z, 更新日期:2020-07-27T23:06:33.683Z, __v:0 }, { 阿凡达:空, 删除:false, _id:5F1F5E0067B340004F50A37, 电邮:emailroom2@test.com, 密码:$2a$10$czA2dASdEo1Dw0oAxw.y1eJwg4lrZW12tLE6sUeG5k.pthuinetm, fcm:fcm2, 创建日期:2020-07-27T23:06:40.702Z, 更新日期:2020-07-27T23:06:40.702Z }, { 阿凡达:空, 删除:false, _id:5f1f5d9167b3240004f50a33, 电邮:emailroom1@test.com, 密码:$2a$10$0O2ADCCISIBWLNZNIWFHTXUY8VNQ4SGE/YDRuntKJl9UKnSI.9TEfC, fcm:fcm1, 创建日期:2020-07-27T23:04:49.285Z, 更新日期:2020-07-27T23:04:49.285Z, __v:0 }] 让connectedUsers=['5f1f5df967b3240004f50a36','5f1f5e0067b3240004f50a37'] 输出应该是不在第二个数组中的第三个用户:

myArrayFiltered=[ { 阿凡达:空, 删除:false, _id:5f1f5d9167b3240004f50a33, 电邮:emailroom1@test.com, 密码:$2a$10$0O2ADCCISIBWLNZNIWFHTXUY8VNQ4SGE/YDRuntKJl9UKnSI.9TEfC, fcm:fcm1, 创建日期:2020-07-27T23:04:49.285Z, 更新日期: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”的用户。

您不需要迭代第二个数组。您只需检查用户id是否在connectedUsers阵列中。像这样:

让allUsers=[{avatar:null,deleted:false,_id:5f1f5df967b3240004f50a36,电子邮件:emailroom3@test.com,密码:$2a$10$5EKV6OVOUPPH.3g9STEYO990V.L14kpD2ImZ3AtZtHaRjCg4oj/6,fcm:fcm3,createdAt:2020-07-27T23:06:33.683Z,更新日期:2020-07-27T23:06:33.683Z,u v:0},{化身:null,删除:false,_id:5f1f5e0067b3240004f50a37,电子邮件:emailroom2@test.com,密码:$2a$10$czA2dASdEo1Dw0oAxw.y1eJwg4lrZW12tLE6sUeG5k.pthuinetime,fcm:fcm2,createdAt:2020-07-27T23:06:40.702Z,更新日期:2020-07-27T23:06:40.702Z,u v:0},{化身:null,删除:false,_id:5f1f5d9167b3240004f50a33,电子邮件:emailroom1@test.com,密码:$2a$10$0o2adccisbwlnzniwfhtxuy8vnq4sge/YDRuntKJl9UKnSI.9TEfC,fcm:fcm1,createdAt:2020-07-27T23:04:49.285Z,更新日期:2020-07-27T23:04:49.285Z,u v:0}); 让connectedUsers=['5f1f5df967b3240004f50a36','5f1f5e0067b3240004f50a37']; 让myArrayFiltered=allUsers.filteruser=>{ 返回connectedUsers.includeUser.\u id; }; console.logmyArrayFiltered;
//myArrayFiltered=[{avatar:null,deleted:false,_id:5f1f5d9167b3240004f50a33,电子邮件:emailroom1@test.com,密码:$2a$10$0o2adccisbwlnzniwfhtxuy8vnq4sge/YDRuntKJl9UKnSI.9TEfC,fcm:fcm1,createdAt:2020-07-27T23:04:49.285Z,更新日期:2020-07-27T23:04:49.285Z,u v:0}]在您的解决方案中,您正在检查某些元素是否与用户id不相等,但您可能想检查某些元素是否与之匹配:

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

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

您可以使用indexOf方法检查数组中的项,也可以不检查

let myArrayFiltered = allUsers.filter((user) => {
        return connectedUsers.indexOf(user._id) > -1;
      });
让诱惑者= [{化身:null,删除:false,_id:5f1f5df967b3240004f50a36,电子邮件:emailroom3@test.com,密码:$2a$10$5EKV6OVOUPPH.3g9STEYO990V.L14kpD2ImZ3AtZtHaRjCg4oj/6,fcm:fcm3,createdAt:2020-07-27T23:06:33.683Z,更新日期:2020-07-27T23:06:33.683Z,u v:0},{化身:null,删除:false,_id:5f1f5e0067b3240004f50a37,电子邮件:emailroom2@test.com,密码:$2a$10$czA2dASdEo1Dw0oAxw.y1eJwg4lrZW12tLE6sUeG5k.pthuinetime,fcm:fcm2,createdAt:2020-07-27T23:06:40.702Z,更新日期:2020-07-27T23:06:40.702Z,u v:0},{化身:null,删除:false,_id:5f1f5d9167b3240004f50a33,电子邮件:emailroom1@test.com,密码:$2a$10$0o2adccisbwlnzniwfhtxuy8vnq4sge/YDRuntKJl9UKnSI.9TEfC,fcm:fcm1,createdAt:2020-07-27T23:04:49.285Z,更新日期:2020-07-27T23:04:49.285Z,u v:0}] 让connectedUsers=['5f1f5df967b3240004f50a36','5f1f5e0067b3240004f50a37'] 让myArrayFiltered=allUsers.filteruser=>{ 返回connectedUsers.indexOfuser.\u id>-1; };
console.logmyArrayFilteredHave是否尝试在筛选器回调中使用connectedUsers.IncludeUser.\u id?如果arrow函数只有1个参数,则可以去掉括号。This:user=>{。可以是This:user=>{.另外,我想你真的可以说allUsers.filterusers=>connectedUsers.IncludeUser.\u id;排除return语句,使代码更优雅/简单。这正是我要建议的解决方案。不过需要注意的一点是:includes似乎没有IE支持,而且在生产中有一次它咬了我一口,这很糟糕,因为我它读起来非常优雅。如果您需要更广泛的浏览器支持,您可以使用indexOf执行相同的操作。对于数组中不存在的项,它返回-1,因此这将使用Dillan更可读的函数:allUsers.filter u=>connectedUsers.indexOf.\u id>=0编辑:虽然,j
从示例数据来看,这更可能是服务器端代码,我想是的,这是一个很好的观点。谢谢你指出这一点。我个人使用!==-当我使用indexOf.1时,但我试图获取不在第二个数组中的用户。