【问题标题】:filtering with multiple conditions in javascript在javascript中使用多个条件进行过滤
【发布时间】:2021-12-24 18:37:15
【问题描述】:

我正在尝试根据输入过滤数据,它工作正常,但我想为它添加一个额外的条件。如果给出了 title 或其他值(例如 sendFrom),它应该返回。

 const newData = masterDataSource.filter(function (item) {

    const itemData = item.titel  ? item.titel.toUpperCase() : ''.toUpperCase();
    const textData = text.toUpperCase();
    return itemData.indexOf(textData) > -1;
  });

我尝试添加一些运算符,但没有按计划进行

     const newData = masterDataSource.filter(function (item) {

    const itemData = item.titel || item.sendFrom ? item.titel.toUpperCase() || item.sendFrom.toUpperCase() : ''.toUpperCase();
    const textData = text.toUpperCase();
    return itemData.indexOf(textData) > -1;
  });

谢谢

【问题讨论】:

  • 究竟是什么没解决? "" 的大写是什么?
  • ''..toUpperCase() 是不必要的,抱歉。我仍然可以按标题过滤,但不能按 sendFrom

标签: javascript reactjs filtering


【解决方案1】:

如果我明白你想要什么,你会想要这样的东西:

const itemData = item.titel ? item.titel.toUpperCase() : (item.sendFrom ? item.sendFrom.toUpperCase() : ''.toUpperCase());

括号不是必需的,但我添加它们是为了更容易获得逻辑。

另外,''.toUpperCase() 没有多大意义,和'' 一样。

您可以将初始条件替换为

const itemData = (item.titel  && item.titel.toUpperCase()) || '';

及修订版:

const itemData = (item.titel  && item.titel.toUpperCase()) || (item.sendFrom  && item.sendFrom.toUpperCase()) || '';

同样,括号不是必需的。

参考:
Conditional (ternary) operator
Logical Operators

【讨论】:

  • (item.titel && item.titel.toUpperCase()) || (item.sendFrom && item.sendFrom.toUpperCase()) || ''; 可以缩短为(item.titel || item.sendFrom)?.toUpperCase() ?? ''
  • 我认为应该是(item.titel || item.sendFrom || '').toUpperCase(),因为如果既没有.titel 也没有.sendForm 你调用undefined.toUpperCase() 会导致错误。
  • nope ... 注意Optional chaining ( ?. )Nullish coalescing operator ( ?? ) 这两个运算符的用法。想要尽早退出 es 并且不希望将额外的可避免的变体作为后备变体 ''.toUpperCase()
  • 哇,你完全正确!我什至不知道?. 的存在,我用js 15 年了!
【解决方案2】:

您可以将所需的属性收集到一个数组中,并在检查值的同时对其进行迭代。

const newData = masterDataSource.filter(({ titel = '', sendFrom = '' }) => 
    [titel, sendFrom].some(s => s.toUpperCase().includes(text.toUpperCase()))
);

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2016-08-04
相关资源
最近更新 更多