【问题标题】:JavaScript Filter Func: filter on multiple conditions (either could be true)JavaScript Filter Func:过滤多个条件(可能为真)
【发布时间】:2019-06-26 08:55:46
【问题描述】:

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

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

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 个条件之一为真过滤数组的帮助将不胜感激。

【问题讨论】:

    标签: javascript arrays algorithm filter filtering


    【解决方案1】:

    每个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)

    (**当然,除非它是0nullundefined 或任何falsy 值。在这种情况下,它们将无法满足obj.num 两个ifs 的条件)

    【讨论】:

      【解决方案2】:

      让我们先了解问题

      所以你有两个条件一个检查不等于1 和其他检查不等于3 例如如果num = 1 第一个失败但第二个仍然通过所以最终你会返回@987654324 @ 在任何情况下。

      您需要在单个 if 语句中检查两个条件。

      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 => obj.num !== 1 && obj.num!=3)
      }
      
      console.log(filterArr(arr))

      【讨论】:

      • 是的,这是有道理的。我想多了,没有调整自己的状态。感谢您的回答和解释。
      猜你喜欢
      • 2018-05-30
      • 2018-09-02
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2021-03-28
      • 2011-02-05
      相关资源
      最近更新 更多