在 javascript 中使用多个条件进行过滤

filtering with multiple conditions in javascript

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

 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;
  });

谢谢

您可以将需要的属性收集到一个数组中,并在检查值时迭代它们。

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

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

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