首页 > 解决方案 > JavaScript Filter Func:过滤多个条件(可能为真)

问题描述

可能是我正在寻找的超级简单的东西。

我有一个包含一些信息的对象数组。根据用户操作,我想过滤掉一些对象;

let arr = [
 {'num': 1, 'name': 'joe'},
 {'num': 2, 'name': 'jane'},
 {'num': 3, 'name': 'john'},
 {'num': 3, 'name': 'johnny'},
]

我试过的

 function filterArr(arr) {
  return arr.filter(obj => {
    if(obj.num && obj.num !== 1) {
      return obj;
    }
    if(obj.num && obj.num !== 3) {
     return obj;
    }
  })
}

当我运行 filterArr 时,我返回了原始数组,但预期的结果应该只是{'num': 2, 'name': 'jane'},,。我可以在两个嵌套条件中使用 console.log。

将不胜感激基于 2 个条件之一的过滤数组的任何帮助。

标签: javascriptarraysalgorithmfilterfiltering

解决方案


每一个num都会通过你的任何if一个条件,因为宇宙中没有一个数字同时等于 1 和 3**。您可以将&&条件链接到内部filter以检查所有条件:

let arr = [
 {'num': 1, 'name': 'joe'},
 {'num': 2, 'name': 'jane'},
 {'num': 3, 'name': 'john'},
 {'num': 3, 'name': 'johnny'},
]

let filtered = arr.filter(a => a.num && a.num !== 3 && a.num !== 1)

console.log(filtered)

(**当然,除非它是0,或任何虚假值。在这种情况下,它们将不满足两个s 的条件)nullundefinedobj.numif


推荐阅读