【问题标题】:Filter array with filter() and includes() [duplicate]带有filter()和includes()的过滤器数组[重复]
【发布时间】:2020-11-01 13:19:30
【问题描述】:

我有什么

const pets = ['cat', 'dog', 'bat'];
console.log(pets.filter((pet) => !pet.includes('cat', 'dog')));

预期输出

["bat"]

实际输出

["dog", "bat"]

这只是一个例子。在我的真实代码中,我正在对我的全局状态(useContext、useReducer)执行删除操作。

convocatorias: state.convocatorias.filter(
    (convocatoria) => !convocatoria._id.includes(action.payload)
),

action.payload 是一个 id 数组。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    Array.includes() 接受一个参数,你的意思是:

    const pets = ['cat', 'dog', 'bat'];
    console.log(pets.filter((pet) => !['cat', 'dog'].includes(pet)));

    【讨论】:

      【解决方案2】:

      你需要颠倒你的逻辑,像这样:

      pets.filter(pet => ['cat', 'dog'].includes(pet))
      

      【讨论】:

        【解决方案3】:

        includes判断一个数组是否包含某个值。在您的情况下,pet 不是数组,而是当前正在迭代的元素。

        其次,includes 带有两个参数,如includes('cat', 'dog'),表示从数组索引“dog”中搜索cat。数组索引是基于数字的,所以includes('cat', 'dog') 没有任何意义

        const excludedVals = ['cat', 'dog'];
        const pets = ['cat', 'dog', 'bat'];
        console.log(pets.filter((pet) => !excludedVals.includes(pet)));

        【讨论】:

          【解决方案4】:

          Includes() 接受一个参数,但您可以选择使用 && 条件或正则表达式。

          const pets = ['cat', 'dog', 'bat'];
          console.log(pets.filter((pet) => !pet.includes('cat') && !pet.includes('dog')));
          
          console.log(pets.filter((pet) => !(new RegExp(/(cat|dog)/).test(pet))))

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-14
            • 1970-01-01
            • 2022-01-07
            • 2023-04-09
            • 1970-01-01
            • 2012-09-01
            相关资源
            最近更新 更多