【问题标题】:Trouble filtering by multiple conditions from array无法通过数组中的多个条件进行过滤
【发布时间】:2021-11-22 05:55:58
【问题描述】:

在 React Redux 中使用多个选项进行过滤:

过滤选项:

{
    option1: ['GY'],
    option2: ['Y'],
    option3: [],
    option4: ['N'],
    option5: ['A', 'W'],
}

过滤功能:

body.search.listFiltered = body.search.list.filter(
    (i) =>
        filterOption["option1"].includes(i.s) &&
        filterOption["option2"].includes(i.b) &&
        filterOption["option3"].includes(i.u.p) &&
        filterOption["option4"].includes(i.f.p) &&
        filterOption["option5"].includes(i.n.p)
);

即使option3 为空,它也应该可以工作——它可以是任何其他选项。

每个option-x 与一个特定对象一起使用,例如option1 与对象i.s。而option2i.b 等等......

现在它返回一个空数组[]

我在这里做错了什么?

【问题讨论】:

  • 你有什么错误吗?
  • 没什么,它只是返回一个空数组。当我只有 1 或 2 个选项时,它才有效(但它们的数组需要带有值)。但是对于上面的多个类似它只是没有。 @NeelDsouza
  • 可以先检查filterOption中是否有空数组,再过滤body
  • @Yaroslav 但有时一些option-X 数组会是空的。那我该如何修复过滤器呢?

标签: javascript reactjs redux filter react-redux


【解决方案1】:

你可以这样做

const filterOption = {
option1: ['GY'],
option2: [true],
option3: [],
option4: [false],
option5: ['A', 'W']
 }
 
const array = [{b:'GY'},{s:true},{p:'A'},{x:false},{e:'A'}, {b:'GY',s:true,p:'A', x:false, e:'A'  }]

 
const result = array.filter(
(i) =>
{
const filterCheck = option => item => filterOption[option].length > 0 ?   filterOption[option].includes(item) : true

return  filterCheck("option1")(i.b) &&
    
        filterCheck("option2")(i.s) &&
    
        filterCheck("option3")(i.p) &&
    
        filterCheck("option4")(i.x) &&
    
        filterCheck("option5")(i.e)}
    
)
console.log(result)

【讨论】:

  • 问题是,我有filterOption['option1'] 等...因为它们都匹配includes() 中的特定对象。
  • 例如 option1 与对象 i.s 一起使用。而option2i.b 等等......
  • 所以不可能这样做。特别是因为有些选项是布尔值。
  • 已更新,也许这行得通?唯一的事情是当 filterOption 数组为空时决定你想做什么
  • 它不能是 true 因为 option 3-5 只有布尔值。因此,如果为其中任何一个选择false,则将显示真假...
猜你喜欢
  • 2019-10-28
  • 2021-03-05
  • 1970-01-01
  • 2021-01-26
  • 2021-10-20
  • 2015-10-28
相关资源
最近更新 更多