如何在排除特定条件的同时过滤数组?

How do I filter an array while excluding specific conditions?

我有一个按钮,我通过读取一个数组并检查它的属性来禁用它。

我的数组如下所示:

const arr = [
  {id: ‘1’, name: ‘SOME_THING’, status: ‘AGREED’},
  {id: ‘2’, name: ‘THIS_THING’, status: ‘AGREED’},
  {id: ‘3’, name: ‘OTHER_THING’, status: ‘AGREED’},
  {id: ‘4’, name: ‘EVERY_THING’, status: ‘AGREED’},
]; 

我目前disable/enable这个按钮的逻辑是这样的:

arr.filter((item) => item.indexOf(‘THING’) > -1)
   .every((item) => item.status === ‘AGREED’)

现在我的要求变了。我想以相同的方式 enable/disable 按钮,但我想 EXCLUDE 这个数组中的特定元素。比如我要排除这两项:

{id: ‘2’, name: ‘THIS_THING’, status: ‘AGREED’},
{id: ‘3’, name: ‘OTHER_THING’, status: ‘AGREED’},

使用我的逻辑,如何在排除这两个的同时过滤我的数组?

我知道我可以尝试删除这些特定的项目,但我想知道是否有更简洁的方法可以在不明确删除的情况下执行此操作。

您可以通过始终假设给定的 key/value 对为真来排除项目​​列表,而不管值

const exclusionList = ['THIS_THING', 'OTHER_THING'];

arr.filter((item) => item.indexOf(‘THING’) > -1)
   .every((item) => item.status === ‘AGREED’ || exclusionList.includes(item.name))

另外请添加您的 keyName(name) 在您使用 indexOf

的地方
let arr = [
      {id: '1', name: 'SOME_THING', status: 'AGREED'},
      {id: '2', name: 'THIS_THING', status: 'AGREED'},
      {id: '3', name: 'OTHER_THING', status: 'AGREED'},
      {id: '4', name: 'EVERY_THING', status: 'AGREED'},
      
    ]; 
    const list = ['THIS_THING', 'OTHER_THING'];
    console.log(arr.filter((item) => item.name.indexOf(‘THING’) > -1).every((user) => user.status === 'AGREED' || list.some(user.name)))